47

コード:

$('#Inputfield').keyup(function(e)
        {
            if(e.which == 13)
            {
                functionXyz();
            }
            else
            {
                functionZyx();
            }
    });  


$(document).keyup(function(exit) {
              if (exit.keyCode == 27) { functionZzy(); }
});

質問: keyCode == 27 の keyup イベント ハンドラーを削除し、他の $(document).keyup イベント ハンドラーをそのままにしておくにはどうすればよいですか?

4

4 に答える 4

81

次のように、を呼び出すときにその特定のハンドラを参照できるように、名前付き関数を使用する必要があります.unbind()

function keyUpFunc(e) {
  if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);

その後、バインドを解除するとき:

$(document).unbind("keyup", keyUpFunc);
于 2010-10-19T21:27:36.437 に答える
68

イベントハンドラーをさまざまな要素にアタッチしているため、特定のオブジェクトからハンドラーを安全に削除できます(すでに言及されています)。

完全を期すために、同じイベントの複数のハンドラーを同じオブジェクトにアタッチする場合は、名前空間付きのイベントを使用できます。

$('#Inputfield').bind('keyup.keep', function(e){/*...*/});
$('#Inputfield').bind('keyup.notkeep', function(e){/*...*/});

$('#Inputfield').unbind('keyup.notkeep');
// or event  $('#Inputfield').unbind('.notkeep');

jQuery 1.7以降、イベント ハンドラーを追加および削除するには、メソッド.onとメソッドが推奨される方法です。.offこの目的のために、それらはまったく同じように動作.bind.unbind、名前空間付きのイベントでも機能します。

于 2010-10-19T21:46:23.360 に答える
9

jQuery を使用すると、最初の呼び出し後にバインド解除されるイベントをバインドできます。この keyup 関数を 1 回だけ実行する場合は、次の .one() メソッドを参照してください: http://api.jquery.com/one/

$(document).one('keyup', function(e) {
              if (e.keyCode == 27) { functionZzy(); }
});
于 2010-10-19T21:29:27.360 に答える
7

要素にハンドラーが 1 つしかない場合はunbind、Nick Craver が提案するように、名前付き関数を使用せずに安全にアンバインドできます。この場合、呼び出し

$('#Inputfield').unbind('keyup');

のハンドラには影響しませんdocument

于 2010-10-19T21:32:47.660 に答える