【发布时间】:2014-04-01 21:04:24
【问题描述】:
我对 Firefox 的 keydown 行为感到不满,因为在没有关注特定字段的情况下按下回车键(实际上是任何键)不会触发 keydown 事件只会触发 keypress 事件。
这可能会非常令人困惑,因为 keydown 和 keyup 事件使用 JavaScript 键码,而 keypress 使用 ASCII 码。幸运的是 13(输入/返回)对两者都是通用的。
FF 在这种情况下使用 keypress 有什么已知的原因吗?有什么好处?
一旦建立起来,IE8 就抛出了一个愚蠢的问题,因为它不允许 preventDefault 要求而不是 returnValue = false 来自另一个 SO 帖子的以下 sn-p 证明非常有用:
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;
}
});
我只是想知道,以便我知道哪个最适合申请。
非常感谢。
【问题讨论】:
-
你知道 jQuery 规范了浏览器之间的差异吗?在 jQuery 中,
event.which应该在浏览器中保持一致。此外,jQuery 的event.preventDefsult();也可以在 OldIE 中使用。 -
@Rob W,嗨,Rob 是的,我确实知道这一点。在线 jquery 文档记录了我使用过的 event.which 的使用。此处显示的许多帖子都使用密钥代码而不是哪个。因此问题。我理解 event.preventDefsult();应该在任何地方都可以工作。
-
想知道我们能否在 2016 年获得相关浏览器的更新?
标签: javascript jquery javascript-events event-handling