React 输入框事件总结

1,618 阅读2分钟

前言:在业务中,经常遇到也就4种情况:布局、业务逻辑、表单、动态交互,其中最折磨我的就是表单了。

表单涉及到大概3中情况:1--既要能新建、又能修改,2--表单中的多种输入校验,3--表单提交时的数据校验、交互。

本文主要讲第二种情况——表单的校验,首先介绍一些基础的正则函数,然后介绍表单校验中用到的JS事件。

输入框事件校验概览图

输入框正则校验常用到的方法

1.字符串中使用到正则的函数

String.match(regexp):返回匹配的值,如果有g标志,则返回一个数组

string.search(stirng/regexp):返回和正则表达式匹配的子字符串的起始位置

string.replace(regexp, string):用string替换被匹配的字符串

string.split(regexp/string):返回数组

2.new Regexp():正则匹配

new Regexp().test(string):返回true\false

new Regexp().exec(string):返回被匹配的字符串

以上是输入框校验需要掌握的一些基础知识,针对某些特殊字符的校验规则这里就不一一提交了,百度一搜一大片,最重要的是在遇到以后积累下来,下次可以直接用!

推荐一个总结的比较好的正则校验总结

中文输入法和非中文输入法,事件对比

针对中文输入法,提供了compositionstart、compositionupdate、compositionend事件,其中 compositionstart 会在中文输入法开始就触发,upate会在不断输入字符时触发,end事件和input事件的触发顺序,各个浏览器的实现,有所不同。需要做兼容哦!!

针对中文和非中文的输入事件,做了一个时间轴的总结,可以对比着看。

非中文输入法事件

输入英文字符f时,具体输出如下:

中文输入法事件

输入中文字符时,具体输出如下:

先触发keydown--> compositionstart-->compositionupdate-->onInput,然后重复该过程,直到组合结束触发compositionend事件。虽然chrome下,end事件在onInput后触发,但不同浏览器实现不一样,记得要兼容哦!提供一个兼容写法

compositionend事件:等组合结束后,会去触发onInput事件,即可解决中文输入法一开始输入就触发校验的问题。

chromev53以后,onInput 以后才触发 compositionEnd,所以要在compositionEnd时,也调用一下在onInput中的代码。

表单校验时,用什么事件最合适

请查看图1中的表单事件总结。

针对实时校验,推荐用 onInput事件;

针对填写完成再校验,推荐用 onBlur事件;

针对中文输入法的实时校验,推荐用onInputcomposition事件的结合,记得要做兼容。