2013-05-20 3 views
3

Я смотрел на несколько способов обойти это, но я не могу сказать, мой код:Javascript removeEventListener не работает - слушатель событий остается

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); 
} 

Код удалить не работает, гаванью» t попробовал множество решений, но это последнее, что было на моем скрипте, и я просто хочу, чтобы это было сделано.

Спасибо всем

+0

Вам не нужно аргумент 'false' – karthikr

+0

2 проблемы: 1. вы должны удалить ОДНУЮ функцию (ссылаться на нее), а не другую, которая выглядит одинаково; 2. addEvenListener и removeEventlistener должны быть прикреплены к одному и тому же объекту. Я только что обнаружил, что «document.addEventListener» не может быть удален с помощью «window.removeEventListener» – anneb

ответ

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 делает его легче иметь дело с этим, благодаря его namespaced events feature :

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

// later 

$(lb).off('keyup.my_namespace'); 
1

Вы не можете удалить анонимную функцию с помощью removeEventListener, i nstead используйте имя функции. например:

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; 

} 
1

Вы должны имя функции обработчика для того, чтобы ссылаться на него позже при удалении слушателя:

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

document.body.removeEventListener('keyup', keyup, false); 
+0

. Это генерирует Uncaught ReferenceError почти во всех браузерах ... –

Смежные вопросы