前端input框文字最大值
针对中英文不同长度的问题
// 中文占2个字符,英文占1个字符
export function getStringLength(str: string) {
  let strLength = 0;
  const strLen = str.length;
  for (let i = 0; i < strLen; i++) {
    const charCode = str.charCodeAt(i);
    // 大于255,表示双字节字符,需要长度+2
    if (charCode > 255) {
      strLength += 2;
    } else {
      strLength += 1;
    }
  }
  return strLength;
}然后在 onchange 的时候 实时监听 在计算出剩余的长度
export const NAME_MAX_LIMIT = 40;
const [maxLength, setMaxLength] = useState(NAME_MAX_LIMIT);
const inputOnKeyUp = (
  event: React.KeyboardEvent<HTMLInputElement>,
  name: string
) => {
  if (event.key === "Enter") {
    const value = event.currentTarget.value;
  }
};
const inputOnChange = (event: React.ChangeEvent<HTMLInputElement>) => {
  const remainingStingLength =
    NAME_MAX_LIMIT - getStringLength(event.target.value);
  setMaxLength(event.target.value.length + remainingStingLength);
};
<input
  ref={inputRef}
  onKeyUp={(e) => inputOnKeyUp(e, actorName)}
  onChange={(e) => inputOnChange(e)}
  maxLength={maxLength}
/>;针对输入法的处理
input 组合事件 compositionEvent 组合事件是拆分了不同步骤的事件的组合,是由 compositionStart,compositionUpdate 和 compositionEnd 三个事件组合而成。
Start 和 End 事件只执行一次,Update 会执行多次。 输入前,会触发 Start 和 Update 事件;没有选中中文之前,会一直触发 Update 事件;选中文字后,会触发 End 事件;一个组合事件完成,以此循环。
compositionstart 输入法编辑器开始新的输入合成时会触发 compositionstart 事件。 例如:当用户使用拼音输入法开始输入汉字时,这个事件就会被触发。
compositionupdate 字符被输入到一段文字的时候(这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)会触发 compositionupdate 事件。
compositionend 当文本段落的组成完成或取消时, compositionend 事件将被触发。
<input
  placeholder="Basic usage"
  onChange={(e) => console.log("onchange", e.target.value)}
  onCompositionStart={(e) => console.log("onCompositionStart", e.target.value)}
  onCompositionUpdate={(e) =>
    console.log("onCompositionUpdate", e.target.value)
  }
  onCompositionEnd={(e) => console.log("onCompositionEnd", e.target.value)}
/>直接使用 onCompositionEnd 事件,只能监听到输入改变,不能监听到删除。
最后更新于
这有帮助吗?