Material-UI的TextField验证和onChange事件处理程序似乎未按预期工作

时间:2019-04-04 14:59:05

标签: javascript reactjs material-ui textfield onchange

我正在将{strong> React 和 Material-UI TextField type='number'一起使用,但是正如我所看到的,验证是很简单,它只允许可以代表数字[0-9\.eE-]*一部分的任何字符,并允许这样的输入:eee---...e---0.-1,我决定实现自己的验证。 (不确定这个简单的验证是Material-UI还是HTML本机验证,但没关系)

所以我写了这个正则表达式进行验证,但是一旦我输入一个与正则表达式不匹配的字符,我的 onChange 事件处理程序就不会被调用

我可以阻止组件以某种方式执行此操作吗?

onValueChange = (ev) => {
    if( /^-?(\d+)?(\.\d*)?$/.test(ev.target.value)) {
        this.setState({ value: ev.target.value });
    }

完整代码:https://codepen.io/anon/pen/eoZOaE?editors=1000

1 个答案:

答案 0 :(得分:0)

  

(不确定这个简单的验证是Material-UI还是HTML本机验证,但没关系)

此琐碎的验证是本机验证,因为Material-UI InputBase组件仅将type='number'传输到本机<input />,并且没有定义任何其他验证。

似乎onchange事件不会在每个输入上触发-也是本机输入的行为。您可以在以下示例中进行检查:https://codesandbox.io/s/20z5qrnqq0?fontsize=14-如您所见-onChange事件也仅针对“有效”字符而被触发。

我尝试通过oninput HTML5事件找到其他解决方案,如建议的here一样,但它也不起作用。因此,在这种情况下,我认为您可以使用type='text'输入来控制所有可能的输入,从而做出正确的决定。