Firefox会在按下keypress
键时触发tab, shift, up/down/left/right arrow
回调功能,但Chrome,Safari,IE不会。
请参阅this CodePen。
不仅会触发keypress
上的回叫功能,还会在按下keyCode
键时将0
作为tab, shift, up/down/left/right arrow
传递。
我可以
var charCode = (typeof e.which === 'number') ? e.which : e.keyCode;
if (charCode === 0) return;
但是想知道,如果它是Firefox中的一个错误,那么为什么Firefox和其他浏览器之间存在不一致?
答案 0 :(得分:2)
https://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress:
如果用户代理支持,则必须在按下某个键时调度此事件,当且仅当该键通常产生字符值时才会发送。
通过最后一部分我会说,Firefox正在处理这个错误 - 制表符,shift键和箭头键不会“产生字符值。”
(制表符会产生“字符值” - 即使不是“可见”,制表符仍然是一个字符 - 在其他环境中,但在浏览器的网页中却没有,但只是跳到下一个可聚焦元素;因此必须将其排除在触发事件之外。)