Answers:
即使捕获了keydown
/ keyup
事件,这些也是tab键触发的唯一事件,您仍然需要某种方法来防止发生默认操作,即按tab键顺序移动到下一个项目。
在Firefox中,您可以preventDefault()
在传递给事件处理程序的事件对象上调用方法。在IE中,您必须从事件句柄返回false。JQuery库preventDefault
在其事件对象上提供了一种在IE和FF中工作的方法。
<body>
<input type="text" id="myInput">
<script type="text/javascript">
var myInput = document.getElementById("myInput");
if(myInput.addEventListener ) {
myInput.addEventListener('keydown',this.keyHandler,false);
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
function keyHandler(e) {
var TABKEY = 9;
if(e.keyCode == TABKEY) {
this.value += " ";
if(e.preventDefault) {
e.preventDefault();
}
return false;
}
}
</script>
</body>
keycode
8
?
前面的答案很好,但是我是坚决反对将行为与表示混合在一起(将JavaScript放入HTML中)的人之一,所以我更喜欢将事件处理逻辑放入JavaScript文件中。此外,并非所有浏览器都以相同方式实现事件(或e)。您可能需要在运行任何逻辑之前进行检查:
document.onkeydown = TabExample;
function TabExample(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var tabKey = 9;
if(evt.keyCode == tabKey) {
// do work
}
}
我建议不要更改键的默认行为。我在不触摸鼠标的情况下做了尽可能多的操作,因此,如果您使我的Tab键不移到表格的下一个字段,我会感到非常沮丧。
但是,快捷键可能很有用,尤其是在大型代码块和嵌套的情况下。Shift-TAB是一个错误的选择,因为通常这会将我带到表单的上一个字段。也许可以在WMD编辑器上使用新按钮来插入带有快捷键的代码TAB吗?
ScottKoon给出的最佳答案中有一个问题
就这个
} else if(el.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
应该
} else if(myInput.attachEvent ) {
myInput.attachEvent('onkeydown',this.keyHandler); /* damn IE hack */
}
因此,它在IE中不起作用。希望ScottKoon将更新代码