3

次の jQuery イベントがあります。

$("#scanItem").live("keydown", function (e) {
    if (e.keyCode == 13) {
        e.preventDefault();
        alert('hi');
    }
});

scanItem は私のページのテキストボックスです。

初めてページをロードすると、すべて正常に動作します。Enter キーを押すと、イベントが 1 回だけ発生します。ただし、jQuery の読み込みを行って div を再読み込みするドロップダウンがあります。

div がリロードされた後、テキスト ボックスで Enter キーを押すと、アラートが 3 回発生します。

私はこれについて何時間も頭を悩ませてきました。なぜこれが起こっているのですか?

4

2 に答える 2

6

$("#scanItem").unbind().on("keydown", function (e) {
    if (e.keyCode == 13) {
        e.preventDefault();
        alert('hi');
    }
});

于 2013-02-06T20:47:23.103 に答える
3

スクリプトがリロードされると、毎回イベント ハンドラーが追加されます。

スクリプトを div の外に移動できない場合の簡単な解決策は、スクリプトを使用しないように変更することliveです。

$("#scanItem").on('keydown', function (e) {

#scanItem機能させるには、コードが要素の後にあることを確認する必要があります。

したがって、これは同じ ID を持つ将来の要素には触れません。

ところで、live廃止され、新しいバージョンから削除されたonように、代わりに直接 (ここのように) または委任によって (機能的には と同等になります) を使用する必要がありますlive

于 2013-02-06T20:43:50.783 に答える