Я новичок в javascript, и я столкнулся со следующей проблемой, которую я не смог найти в предыдущих ответах после многократного поиска (надеюсь, что это не дубликат).Невозможно удалить (связанный) прослушиватель событий
У меня есть следующий модуль/класс. Предположим, что я пытаюсь реализовать компонент, который можно перетаскивать по экрану. Когда пользователь нажимает на него первый раз, мы начинаем слушать события mousemove
window
, чтобы узнать, куда движется пользователь. Как только пользователь освобождает мышь, мы хотим удалить прослушиватели событий в окне. Код довольно прост, и он работает, если я просто закодирую его за пределами iife. Однако в настоящее время removeEventListener
просто не работает. Думаю, это может иметь какое-то отношение к clousure, scope или что-то в этом роде, но я полностью его не понимаю. Большое спасибо заранее, вот код:
MyClass.js
var myNamespace = myNamespace || {};
(function(myNamespace){
var onMouseDragDown = function(e){
window.addEventListener("mousemove", onMouseDragMove,true);
window.addEventListener("mouseup", onMouseDragUp,false);
};
var onMouseDragUp = function(e){
// This code executes, but the events CONTINUE to be triggered after removing the event listener
//The following lines do not seem to have any effect whatsoever even though they are executed when the user releases the mouse button
window.removeEventListener("mousemove", onMouseDragMove, true);
window.removeEventListener("mouseup", onMouseDragUp,false);
};
var onMouseDragMove = function(e){
console.log('moving');
};
myNamespace.MyClass = function(param){
this._param = param;
this._div = document.createElement('div');
this._div = ....
this._div.addEventListener('mousedown', onMouseDragDown.bind(this), false);
}
myNameSpace.MyClass.prototype.getDiv = function(){
return this._div;
}
)(myNameSpace);
Index.html
...
function onCreateNewDocumentClicked(event){
var myObject = new myNamepace.MyClass(someParams);
document.body.appendChild(mdi.getDiv());
}
фрагмент кода является неполным, я понятия не имею, где вы выполняете этот код. с помощью 'var onMouseDragDown = function (...)', код внутри этого тела функции не будет выполнен – jasonslyvia
Я отредактировал код, чтобы вы могли видеть, как я создаю объект MyClass из index.html , Код именованных функций (var onMouseDragMove) выполняет только то, что событие продолжает запускаться даже после выполнения wind.removeEventListener .... –
Я вижу, тогда вы, вероятно, должны добавить 'this._div.addEventListener ('mouseup' , onMouseDragUp .bind (this), false); 'в определении' myNamespace.MyClass' – jasonslyvia