我违反了Firefox keydown 行为,因为按下回车键(实际上是任何键)而不关注特定字段不会触发 keydown 事件只会触发按键事件。
这可能非常令人困惑,因为 keydown 和 keyup 事件使用JavaScript密钥代码,而 keypress 使用ASCII代码。幸运的是13(输入/返回)对两者都是通用的。
在这种情况下,使用 keypress 的FF是否有任何已知原因?有什么好处?
一旦确定,IE8就会愚蠢,因为它不允许 preventDefault 要求returnValue = false
来自另一个SO帖子的以下片段证明非常有用:
event.preventDefault ? event.preventDefault() : event.returnValue = false;
在搜索解决这些问题的过程中,我一直对event.keycode
vs event.which
感到困惑。即使用类似于:
$("#class_Name").bind("keydown", function(event){
// do not test input if field controls used
switch(event.which){
case 13:
//enter key
event.preventDefault ? event.preventDefault() : event.returnValue = false;
break;
}
以下是更好的,如果是这样的话?
$("body").keypress(function(event){
// stop inadvertant form submission
if (event.keycode == "13"){
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
});
我想知道,以便我知道哪种方法最适用。
非常感谢。
答案 0 :(得分:10)
某些浏览器使用keyCode
而其他浏览器则使用which
。但是使用jQuery,这是规范化,所以你不必考虑这个。你可以选择你喜欢的那个。
答案 1 :(得分:7)
根据this comment jQuery可能不可靠,this page说:
在event.which
和keydown
的IE< 9中未定义 keyup
。
event.keyCode
上的Gecko(Seamonkey,Firefox)中的 keypress
为0。
event.charCode
仅在Internet Explorer(Mac)的keydown和keyup上受支持。