I was fiddling with preventDefault()
并且必须做错事。
$("#input").bind("keypress", function(event) {
if(event.which == 9) {
event.preventDefault();
alert("You pressed tab.");
}
});
不会阻止标签功能。这有什么问题?
答案 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事件。根据平台和浏览器,可能会出现两个事件之间的其他差异。
所以在这种情况下你使用了错误的事件。它也可能有浏览器兼容性问题。