Javascript event.keycode与event.which
我对Firefox的按键行为感到不满,因为在没有关注特定字段的情况下按enter键(实际上是任何键)不会触发按键事件,而只会触发按键事件 这可能会非常混乱,因为keydown和keyup事件使用JavaScript键代码,而keypress使用ASCII代码。幸运的是,13(enter/return)对两者都是通用的 在这种情况下FF使用按键有什么已知的原因吗?好处是什么 一旦建立起来,IE8就抛出了一个愚蠢的错误,因为它不允许默认请求,而是Javascript event.keycode与event.which,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,我对Firefox的按键行为感到不满,因为在没有关注特定字段的情况下按enter键(实际上是任何键)不会触发按键事件,而只会触发按键事件 这可能会非常混乱,因为keydown和keyup事件使用JavaScript键代码,而keypress使用ASCII代码。幸运的是,13(enter/return)对两者都是通用的 在这种情况下FF使用按键有什么已知的原因吗?好处是什么 一旦建立起来,IE8就抛出了一个愚蠢的错误,因为它不允许默认请求,而是returnValue=false另一篇SO文章中的以
returnValue=false
另一篇SO文章中的以下片段被证明非常有用:
event.preventDefault ? event.preventDefault() : event.returnValue = false;
在解决这些问题的搜索过程中,我一直被event.keycode
vsevent.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,它可能不可靠,并会说:
事件。IEQ中未定义的是哪个
。您知道jQuery规范化了浏览器之间的差异吗?在jQuery中,event.which
应在不同浏览器中保持一致。另外,jQuery的event.preventDefsult()
也将在OldIE中工作。@Rob W,你好,Rob是的,我确实知道这一点。在线jquery文档记录了我使用过的event.com的用法。许多帖子显示这里使用的是键码,而不是哪个。这就是问题所在。我理解那个事件;应该在任何地方都可以使用。想知道2016年我们是否可以在相关浏览器上获得此更新?仅适用于事件由jquery本身生成的情况。捕捉本地事件并将其正常化是不可能的这对我有帮助。这应该是公认的答案。我使用以下行来规范化这些属性:var code=event.which | | | event.keyCode | | event.charCode
此函数将获取非null或0的字段。如果它们都为零,则返回0。