为什么不在使用Tab-keypress后阻止默认()停止焦点更改?

时间:2014-06-24 20:57:40

标签: javascript jquery keypress preventdefault

I was fiddling with preventDefault()并且必须做错事。

$("#input").bind("keypress", function(event) {
    if(event.which == 9) {
    event.preventDefault();
    alert("You pressed tab.");
    }
});

不会阻止标签功能。这有什么问题?

3 个答案:

答案 0 :(得分:2)

试试这个FIDDLE。选项卡时输入失去焦点。绑定到身体修复此问题。

$("body").on("keydown", function(event) {
if(event.which == 9) {
event.preventDefault();
    alert("You pressed tab.");
}
});

答案 1 :(得分:1)

按Tab键时,keypress事件只是未被触发 - 这也解释了为什么没有警报,与防止默认操作无关。

更改代码以使用keydown可以捕获Tab并阻止默认焦点更改(无论如何,在Chrome 1 中)。

$("#input").bind("keydown", function(event) {
    if(event.which == 9) {
        event.preventDefault();
    }
});

1 我在Chrome 35 with jQuery 1.6-2.1中对上述内容进行了测试;它在KO 3.0库下工作。

答案 2 :(得分:1)

来自JQuery的文档,

  

注意:由于任何官方规范都未涵盖按键事件,因此使用它时遇到的实际行为可能因浏览器,浏览器版本和平台而异。

     

此方法是前两个变体中.on(“keypress”,handler)和第三个变量中的.trigger(“keypress”)的快捷方式。

     

当浏览器注册键盘输入时,按键事件将发送到元素。这类似于keydown事件,除了修饰符和非打印键,如Shift,Esc和delete 触发keydown事件,但不触发keypress事件。根据平台和浏览器,可能会出现两个事件之间的其他差异。

所以在这种情况下你使用了错误的事件。它也可能有浏览器兼容性问题。