web-dev-qa-db-ja.com

jQuery:TABキーのキーアップ?

そのため、Tabキーが押された場合にスクリプトを実行するのに苦労しています。少しグーグルで調べた後、Tabの文字コードは9です。また、話しているときに、文字コードを使用せずにキーが押されたかどうかを確認するより良い方法はありますか? charcodeを使用するときにfirebugで次の警告が表示され続けるため、私は尋ねています:

キーアップイベントの「charCode」プロパティは使用しないでください。値は無意味です。

とにかく、それはまだ機能するので、それは問題ではありません。これは私が使用するコードです:

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

上記のコードを使用すると、コンソールは空白のままになり、何も追加されません(Firebugを使用)。もちろん、テキストを記録するのではなく、実際にやってみましたが、何も実行されません。だから誰もこれが機能しない理由を見ることができますか?キーが押されたかどうかを確認するより良い方法はありますか?

前もって感謝します。

38
qwerty

私の考えでは、タブキーを押すと、キーアップが発生する前にフォームの入力がフォーカスを失います。次のように、本体へのバインディングを変更してみてください。

 $('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;
   }

});

これらの2つのうちの1つは動作するはずです...それが本体の場合、キーダウンハンドラーを本体にアタッチし、それがタブの場合、フォーカスのあるフィールドを見つけます(関数.hasFocus()があると思いますか?)、それがあなたのものである場合必要な場合、続行してfalseを返します。それ以外の場合は、ブラウザに処理をさせます。

タブ文字でフィールドを更新したい場合は、コールバックでこれを試してください:

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

テストしていませんが、動作するはずです。また、問題が発生する場合は、タブ文字の代わりに3つまたは4つのスペースを追加することもできます。

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

これを試して

1
AlanFoster