Chrome表单验证和keyup导致的灵异问题
先说下环境,Mac OS El Capitan + Chrome 46,框架是Backbone + Boostrap。
我做了一个自动搜索组件,独立测试时一切正常,放到产品中,别的都没问题,只有回车会出问题。代码在这里
不用说,这个问题很诡异,调试了半天没有头绪,只能通过观察现象去推测:
- 没有报错
- 除了回车,其它功能正常
- 除了回车,
keyUpHandler都能被正确触发 - 回车后,光标跳到其它元素
看来看去,第4条最可疑——我按的是回车,它会什么会跳到别的单元格呢?
这次运气比较好,表单中的接下来的几个元素刚好是日期,用到Bootstrap Datetimepicker这个插件,focus之后会自动填充日期。于是我发现,每次跳到的“其它元素”,都是原先空白的,而且是required的;不会跳到固定的,或者紧挨着的那个文本框。
于是我便想,会不会是:
- 表单
submit在keydown之后触发 - 触发之后进行表单验证,发现有未填的
required元素,于是跳到该元素并提示 - Bootstrap Datetimepicker响应
focus时间,填入日期,提示消失 - 我的Typeahead响应
blur事件,隐藏列表 keyup事件触发,但是输入框已没有焦点,就没有触发
这个推测看起来有点道理,于是我把侦听的事件改成keydown,问题果然解决。
相关文章
移除 Puppeteer 里的保存密码提示窗
大家知道,当我们使用 Chrome 完成登录的时候,Chrome 会询问我们是否要保存密码,如下图所示: 但是 […]
2021-05-093 分钟
Chrome 扩展大升级 Manifest V3:变化
上一篇博客 聊了聊 Manifest V3 的设计思路,接下来就该详细介绍下这个版本的变化。按照 官方介绍,V […]
2021-05-036 分钟
使用 File System Access API 在浏览器里操作本地文件
如《Webpack 5 发布,Chrome 86 开始支持本地文件系统》一文所述,Chrome 86 开始,浏 […]
2020-12-279 分钟


