微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React Input type =“ number”字段不会触发onChange

如何解决React Input type =“ number”字段不会触发onChange

我已将<input type="number" value={value} onChange={onChange}>添加到表单中,并且正在使用简化的onChange函数来检查输入的格式,如以下组件所示:

  export function App() {
    const [value,setValue] = useState("");

    const onChange = (event) => {
      console.log("onChange called",event.target.value);
      setValue(event.target.value);
    };

    return <input type="number" value={value} onChange={onChange} />;
 }

我想通过onChange函数中的验证将输入的值限制为整数。

但是,在添加验证之前,我注意到当用户输入有效的非整数数字输入(例如.eE)时,输入未传递给onChange函数,因此无法执行验证。

下面是一个可用来重现该问题的代码框。

 Example

将验证添加到输入字段以确保输入为整数的最佳方法是什么?

解决方法

e是数字字段中唯一接受的字母,因为它允许使用指数。您可以使用input type="text",但不能像type="number"那样为您提供浏览器的上下箭头。 pattern属性可在提交时验证,但不会阻止某人首先输入“ e”。在React中,您可以使用它来完全阻止'e'键被输入数字输入:

const [symbolsArr] = useState(["e","E","+","-","."]);
  return (
    <div className="App">
      <input
        type="number"
        onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}
      />
    </div>
  );

Codesandbox演示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。