2012-03-12 1 views
0

jQueryとajaxを使用して自分のサイトでライブ検索を作成しようとしています。ページへのタブ移動時にjQueryキーアップがトリガーされましたか?

しかし、検索ボックスにフォーカスがあり、別のブラウザタブに移動すると、検索ページに戻るとjQueryがkeyup()関数をトリガします。私は再現するJSfiddle

の手順でこれを嘲笑しました

  1. オープンJSfiddle、他のブラウザタブ
  2. は、テキストボックスにフォーカス
  3. に別の移動を与えますブラウザのタブ
  4. 元のページ(JSfiddle)に戻る

期待/意図:keyup()はどうなります

トリガされません:私はJavascriptについて多くを知らないタイムスタンプ

によって示されるようにkeyup()は、トリガを、私は読みましたjQueryのドキュメントですが、私は答えを思いつくことはできません。

私は何か間違っているので、これは起こっていますか? Javascript/jQueryまたはブラウザの問題ですか? (Chromeを使用) どうしたらいいのですか?

ありがとうございます!穏やかな。

UPDATE

いうだけでタブ間をクリックするよりも、Ctrlキー+ Tabキーを使用している場合、それが唯一のトリガされ表示されます。ページから離れてクリックすると複製できますが、Ctrl + Shift + Tabを押すと検索ページに戻ります。

keyCode 9をfalseとして返すように解決策が考えられますが、他の提案のために開いたままにしておきます。

+0

イムもクロムをuseingと –

+0

テキストボックスが向こうタブの前にフォーカスを持っています、それを再現することはできませんか?それは残念です、私は私が助けることができるすべてをやりたかった! –

+0

これは問題ありませんが、なぜこのようなイベントをフィルタリングする必要がありますか?入力の値を読み取るだけです。 – kirilloid

答えて

1

私はchrome(win7)も使用しています。再現できません。 あなたのための1つの解決策は、どのキーコード(e.keyCode)が生成されているかをチェックすることです。常に同じキーコードの場合はreturn falseです。 EXのために 、キーコード37の場合:

$('#search').keyup(function(e) { 
    if(e.keyCode == 37) return false; 
    $('#test').append('<li>'+e.timeStamp+'</li>'); 
}); 
​ 
+0

これはもちろん、あなたのkeyup関数からそのキーを削除するので、あなたはその特定のキーをテストしたくないことを確認する必要があります。 – ahren

+0

私はSafariでそれを複製することもできます。興味深いことに、keyCodeは9です。これはタブです。 –

+0

例: 'Ctrl + V 'は' keyup'イベントも生成します。私は確信していません、フィルタリングは本当に必要です。 – kirilloid