3

私はこれを回避するいくつかの方法を見てきましたが、実際にはわかりません。私のコードは次のとおりです。

lb = document.body;

if(lb.addEventListener){    
    lb.addEventListener('keyup',
    function(event){
        keyPress(event.keyCode)
    }, false);
}

//In another function.

if(document.body.removeEventListener){
    document.body.removeEventListener('keyup', function(event){event.keyCode}, false);
} 

削除コードが機能していません。まだ多くのソリューションを試していませんが、スクリプトの最後のことであり、実行したいだけです。

皆さん、ありがとうございました

4

3 に答える 3

4

removeEventListener を呼び出すときは、addEventListenerと同じ関数インスタンスを指定する必要があります。

var lb = document.body;

var callback = function(event){
    keyPress(event.keyCode)
};

if(lb.addEventListener){    
    lb.addEventListener('keyup', callback, false);
}

//In another function.

if(document.body.removeEventListener){
    document.body.removeEventListener('keyup', callback, false);
}

jQuery では、名前空間付きのイベント機能のおかげで、これを簡単に処理できます。

$(lb).on('keyup.my_namespace', function () { ... })

// later

$(lb).off('keyup.my_namespace');
于 2013-05-20T14:34:54.433 に答える
1

removeEventListener を使用して無名関数を削除することはできません。代わりに関数名を使用してください。例えば:

if(lb.addEventListener){    
    lb.addEventListener('keyup', myFunction, false);
}

//In another function.

if(document.body.removeEventListener){
    document.body.removeEventListener('keyup', myFunction, false);
} 

新しい関数:

function myFunction(e){
    var keyCode = e.keyCode;

}
于 2013-05-20T14:35:03.857 に答える
1

後でリスナーを削除するときに参照できるように、ハンドラー関数に名前を付ける必要があります。

lb.addEventListener('keyup', 
function keyup(event){ // assigns the handler to "keyup"
    keyPress(event.keyCode)
}, false);

document.body.removeEventListener('keyup', keyup, false);
于 2013-05-20T14:39:32.280 に答える