@mishaiba

Удаление обработчика (removeEventListener)?

Здравствуйте! Пишу фрагмент кода, который клонирует кликнутые SVG-файлы (также их можно перетаскивать). Возникла проблема в следующем: клонированные элементы тоже должны передвигаться. Из этого вышло, что если заново перебирать массив из SVG-файлов, то требуется удалить обработчик. Просто создать функцию для удаления не получилось (
drWr[i].removeEventListener('click',{handleEvent: transformSVG, d:i}); , просто  drWr[i].removeEventListener('click', transformSVG)
) Посоветовали сделать следующим образом, но тоже не работает (отрывок кода):
for(i=0;i<drWr.length;i++){

drWr[i].addEventListener('click',{handleEvent: transformSVG, d:i});
}

function transformSVG(){

$(".elem_wrap:eq("+this.d+")").resizable({
      aspectRatio: true,
      handles:     'ne, nw, se, sw'
    });
    $(".drag_wrap:eq("+this.d+")").draggable();
    
    $(".elem_wrap:eq("+this.d+")").parent().rotatable();
   
  drWr[this.d].removeEventListener('click', arguments.callee);
};


Подозреваю, что, может, дело в handleEvent, но не уверен. Буду благодарен за помощь, потому что только начинаю.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Вы должны передавать в removeEventListener в точности тот объект/функцию, которые и передали в addEventListener
В случае использования объекта с интерфейсом handleEvent - этот объект будет и передан в handleEvent функцию в качестве this (судя по коду Вы это поняли), так как removeEventListener вызывается из обработчика, то можно туда отдать this:drWr[this.d].removeEventListener('click', this);
P.S. arguments.callee является устаревшим, не стоит его использовать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект
19 апр. 2024, в 16:22
30000 руб./за проект