注:针对的是chrome,IE 对autocomlete属性不生效
问题背景
在项目中,时常需要进行表单提交,当我们填完表单后,在没有点击保存按钮或者提交按钮时,点了以下logo,页面跳回了首页,这时,我们通过浏览器的前进后退按钮,可以返回到之前填写表单页面,这时,会将之前选中或者填写的值显示出来,但我们的页面出现了值赋值错乱的问题,A的值赋给了B这种现象。这是什么原因造成的?
问题原因
经过一番定位,我们找到了原因。浏览器在使用前进后退功能时,之所以会记住之前的值,是因为浏览器对input的autocomplete属性默认是开启的,所以会记住,当我们回退到之前的页面时,autocomplete记住的值会进行回填,回填的依据就是input标签上的name属性,会根据name属性性回显之前填的值,如果没有配置name属性,则会出现赋值错乱的问题,有的值会赋值给前一个字段。
解决方案
- 为了给正确字段赋值正确,我们需要给
input属性配置name属性 - 为不显示之前的值,我们可以将
autocomplete设置为off代码如下:
<input type='text' name='userName' id='userName' autocomplete='off'/>
其他
IE 对autocomplete='off' 不生效,网上有很多方案,但对浏览器的前进后退操作无效,后面发现 input 的type 类型改成button, IE 就不会记录之前的value值,后退操作获取到的value是空,所以我们将隐藏的input标签的type 改成了button 来解决我们兼容IE的问题
<input type='button' name='userName' id='userName' autocomplete='off'/>