我违反了Firefox keydown
的行为,因为在不关注特定字段的情况下按下回车键(实际上是任何键)都不会触发keydown
事件,只会触发`keypress事件。
这可能非常令人困惑,因为keydown
和keyup
事件使用JavaScript密钥代码,而keypress
使用ASCII代码。幸运的是,13(回车/回车)对两者都是通用的。
Firefox在这种情况下使用keypress
有什么已知的原因吗?好处是什么?
一旦建立了这一点,IE8就抛出了一个愚蠢的问题,因为它不允许preventDefault
要求returnValue = false
,而另一篇Stack Overflow帖子中的以下片段被证明非常有用:
event.preventDefault ? event.preventDefault() : event.returnValue = false;
在寻找解决这些问题的过程中,我一直被event.keycode
和event.which
弄糊涂。也就是说,我使用类似于的switch语句是否出错
$("#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;
}
});
我只是想知道,这样我就知道哪一个是最好的申请
一些浏览器使用keyCode
,而另一些则使用which
。但对于jQuery,这是规范化的,所以您不必考虑这一点。你可以选择你喜欢的。
根据这个评论,jQuery可能不可靠,这个页面说:
CCD_ 13在IE<在CCD_ 14和CCD_。
对于返回字符的键,keypress
上Gecko(Seamonkey,Firefox)中的event.keyCode
为0。
event.charCode
仅在Internet Explorer(Mac)的keydown和keyup上受支持。
在JSFiddle 上试用