jQuery:TAB-key的keyup?

时间:2011-01-21 18:48:54

标签: jquery tabs

所以,如果按下Tab键,我在运行脚本时遇到了一些麻烦。经过一些快速的谷歌搜索后,Tab的charcode是9.另外,在我们谈论的时候,有没有更好的方法来检查是否按下键而不使用charcodes?我问,因为我在使用charcode时不断地通过firebug获得以下警告:

  

不应使用keyup事件的'charCode'属性。这个价值毫无意义。

无论如何,它仍然有效,所以这不是问题。这是我使用的代码:

$('/* my inputs */').keyup(function(e) {
   console.log('keyup called');
   var code = e.keyCode || e.which;
   if (code == '9') {
     console.log('Tab pressed');
   }
});

使用上面的代码,控制台留空,没有添加任何内容(使用Firebug)。当然我已经尝试过实际做东西而不是记录文本,但没有任何执行。所以任何人都可以看到为什么这不起作用?有没有更好的方法来检查按键是否被按下?

提前致谢。

3 个答案:

答案 0 :(得分:71)

我的预感是,当您按下Tab键时,表单的输入会在键盘发生之前失去焦点。尝试将绑定更改为正文,如下所示:

 $('body').keyup(function(e) {
    console.log('keyup called');
    var code = e.keyCode || e.which;
    if (code == '9') {
    alert('Tab pressed');
    }
 });

然后,如果有效(对我来说),请尝试将绑定更改为keyDown,然后返回false。这样您就可以实现自己的自定义行为。

$('.yourSelector').keydown(function(e) {
   console.log('keyup called');
   var code = e.keyCode || e.which;
   if (code == '9') {
     alert('Tab pressed');

   return false;
   }

});

这两个中的一个应该有效...如果它是正文,你可以在主体上附加一个keydown处理程序,然后如果它是tab,找到有焦点的字段(我认为有函数.hasFocus()?),如果它是你想要的那个,继续并返回false。否则,让浏览器做它的事情。

如果您想使用制表符更新字段,请在回调中尝试此操作:

var theVal = $(this).val();
theVal = theVal + ' ';
$(this).val(theVal);

没有测试过,但它应该有效。如果它给你带来麻烦,你也可以附加3或4个空格而不是制表符。

答案 1 :(得分:1)

e = e || window.event;
if(e.keyCode == 9)
 alert("Tab pressed");

试试这个

答案 2 :(得分:-1)

如果没有任何反应,无论您按哪个键,可能是您使用的选择器出现了问题?你能否证实你选择得当,或许有:

console.log($('/* my inputs */').length);