Как удалить событие ~EventListener
Читал в учебнике на этом сайте, но так и не понял как правильно удалять событие в нормальных браузерах. Допустим, у меня такой код есть:
element.addEventListener( "click" , function(x) {return function() {$('#div'+x).slideToggle('fast')}}(i), false)
этот код в цикле был, поэтому стоит замыкниепробовал удалять так:
element.removeEventListener( "click" , function(x) {return function() {$('#div'+x).slideToggle('fast')}}(i), false)
но ничего не выходит. Где я ошибся? |
Вторым параметром нужно передать ссылку на функцию, которую нужно удалить.
|
Попробовал, но так не получается повесить замыкание:
function slide(x) {return function() {$('#div'+x).slideToggle('fast')}}
for(i=0;i<ninv.length;i++){
ninv[i].addEventListener( "click" , slide(i), false)
}
//так работает, но удаление события все равно не срабатывает
element.removeEventListener( "click" , slide, false)
|
slide и slide(i) - разные функции. Нужно как-то так:
function slide(x) {return function() {$('#div'+x).slideToggle('fast')}}
var storage = [];
for(i=0;i<ninv.length;i++){
storage[i] = slide(i);
ninv[i].addEventListener( "click" , storage[i] , false)
}
element.removeEventListener( "click" , storage[0], false)
|
А еще, рекомендую использовать оператор var. Тем более в циклах. А то произойдет вот такая фигня:
function someFunc(){
for(i = 0; i < 10; i++){};
};
for(i = 0; i < 10; i++) {
// Думаешь будет 10 алертов??? Как бы не так!)
alert(i);
someFunc();
};
|
ок, учту... спасибо за помощь
|
Всетаки решил проблему. Сперва погуглил, нашел несколько аналогичных тем на других форумах, и там был подмечен ключевой факт - при использовании замыканий создается анонимная функция, так что надо искать решения без них. Поэтому я немного переделал свой скрипт, теперь все работает:
function slide() {return function() {$('#div'+this.num).slideToggle('fast')}}
for(i=0;i<ninv.length;i++){
ninv[i].num = i
//фиксируем номер ячейки массива на ее свойстве, а потом считываем это свойство, как будто находимся в цикле(в функции сверху)
ninv[i].addEventListener( "click" , slide, false)
}
element.removeEventListener( "click" , slide, false)
|
Какие-то странные выводы, и как результат - странный код.:)
Цитата:
var func = (function(){
return function withName(){};
}());
alert( func.name );
Замык ние - есть, и функция - не анонимная. И что? |
Diego,
Если вы используите jQuery тогда для удаления есть unbind() |
Diego,
Если вы используите jQuery тогда для удаления есть unbind |
| Часовой пояс GMT +3, время: 07:45. |