コード:
$('#Inputfield').keyup(function(e)
{
if(e.which == 13)
{
functionXyz();
}
else
{
functionZyx();
}
});
$(document).keyup(function(exit) {
if (exit.keyCode == 27) { functionZzy(); }
});
質問: keyCode == 27のキーアップイベントハンドラーを削除し、他の$(document).keyupイベントハンドラーをそのまま保持する方法
次のように .unbind()
を呼び出すときにその特定のハンドラーを参照できるように、名前付き関数を使用する必要があります。
function keyUpFunc(e) {
if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);
その後、バインドを解除するとき:
$(document).unbind("keyup", keyUpFunc);
イベントハンドラーをさまざまな要素にアタッチしているため、特定のオブジェクトからハンドラーを安全に削除できます(既に説明したとおり)。
完全を期すために、同じイベントの複数のハンドラーをsameオブジェクトに添付する場合は、 名前空間イベント :
$('#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
また、名前空間付きイベントでも動作します。
jQueryを使用すると、最初の呼び出し後にバインドされないイベントをバインドできます。このキーアップ関数を一度だけ実行したい場合は、ここにリストされている.one()メソッドを見てください。 http://api.jquery.com/one/
$(document).one('keyup', function(e) {
if (e.keyCode == 27) { functionZzy(); }
});
要素にハンドラーが1つしかない場合、Nick Craverが示唆するように、名前付き関数を使用せずにunbind
を使用して安全にアンバインドできます。この場合、呼び出し
$('#Inputfield').unbind('keyup');
document
のハンドラーには影響しません。