Удалить обработчик с вложенной функцией
Здравствуйте.
Если я хочу в свою функцию передать событие или просто переменные, то я пишу так: //---------- Это в отдельном файле js подключается в head страницы main_elem.addEventListener('mousedown' function(e) { first(e); }); main_elem.removeEventListener('mouseup' Myfunction); //-------------------------------------------------------------------------------- // А это вложенный js тоже в head страницы------------------------------ function first(e) { e = e || event; elem.addEventListener('mousemove', function(e){ myFunction(e); }); } Причем если в функции не передавать (e) то например фаерфокс не понимает его внутри функции. В моем примере происходит событие "mousedown", это событие порождает новое событие - "mousemove", когда же произойдет событие "mouseup", событие "mousemove" надо прекратить. Можно ли это сделать иначе? Если нет, то вопросы ниже. Вопрос как такие обработчики удалять через removeEventListener(). Если его формат: elem.removeEventListener('click', myFunction); Где myFunction - функция без указания переданных переменных. И как при создании таких обработчиков передать в функцию параметры помимо (e)? |
TommyWork,
1. addEventListener не происходит и не порождает событие, он назначает обработчик события на элемент, дословно добавитьСобытияСлушатель, произойдет событие или нет от него не зависит. 2. removeEventListener требует те же аргументы что были указаны в addEventListener, и чтобы оба метода во втором аргументе ссылались на один и тот же объект (функцию), отсутствующий третий аргумент равняется false: function handler(e){} // или var handler = function(e){}; // или var handler = { handleEvent: function(e){} }; // ПРАВИЛЬНО element.addEventListener('click', handler, false); element.removeEventListener('click', handler, false); // НЕПРАВИЛЬНО element.addEventListener('click', handler, false); element.removeEventListener('mousedown', handler, false); // или element.addEventListener('click', handler); element.removeEventListener('click', handler, true); // или element.addEventListener('click', function(e){}, false); element.removeEventListener('click', function(e){}, false); // или element.addEventListener('click', function handler(e){}, false); element.removeEventListener('click', handler, false); 3. Первый параметр в обработчике независимо от имени всегда является объектом события, однако в атрибуте объект события передается словом event, а элемент события словом this, в произвольном порядке: <input onclick="handler(this, event)"> <input onclick="handler(event, this)"> function handler(arg1, arg2){} |
Rise,
Спасибо) |
Часовой пояс GMT +3, время: 00:51. |