在开发中偶然遇到的一个奇怪的问题,有一个需求会让用户输入邮箱和密码信息,该表单设置了校验规则(当<input/>
触发blur
时,才会触发校验),但以后的测试发现,只要进入该页面时,就会反复触发校验,致使后台接口被频繁请求。因而乎检查代码,初步断定是校验规则出现死循环致使,但考虑到须要blur
才能触发校验,再三检查代码后排除代码问题。因而查看浏览器页面行为,发现该表单邮箱帐号密码字段被Chrome浏览器默认填写,致使反复触发校验。html
<form> <input type="text" name="username"/> <input type="password" name="password"/> </form>
相似于这样的结构,浏览器会默认填写字段。浏览器
浏览器默认开启的表单填写测试
浏览器设置如图:spa
以Chrome为例,当浏览器遇到type="text"
与type="password"
的<input/>
标签紧邻时,会触发浏览器填写行为。默认为黄色背景。code
正常:orm
触发自动填充:htm
既然浏览器遇到type="text"
与type="password"
的<input/>
标签紧邻时触发自动填充行为,则将两个<input/>
隔开,使用隐藏的方式“欺骗”浏览器,将密码信息填写在隐藏区域。接口
<form> <input type="text" name="username"/> <input style="display:none" type="text" name="fakeusernameremembered"/> <input style="display:none" type="password" name="fakepasswordremembered"/> <input type="password" name="password"/> </form>
经测试问题解决。开发