Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.05.2017, 22:15
Интересующийся
Отправить личное сообщение для TommyWork Посмотреть профиль Найти все сообщения от TommyWork
 
Регистрация: 12.04.2017
Сообщений: 15

Удалить обработчик с вложенной функцией
Здравствуйте.

Если я хочу в свою функцию передать событие или просто переменные, то я пишу так:
//---------- Это в отдельном файле 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, 01.05.2017 в 22:26.
Ответить с цитированием
  #2 (permalink)  
Старый 02.05.2017, 09:56
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,664

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, 02.05.2017 в 11:03.
Ответить с цитированием
  #3 (permalink)  
Старый 02.05.2017, 15:23
Интересующийся
Отправить личное сообщение для TommyWork Посмотреть профиль Найти все сообщения от TommyWork
 
Регистрация: 12.04.2017
Сообщений: 15

Rise,
Спасибо)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как удалить div alex2012 jQuery 5 13.10.2016 17:43
Как заставить выполняться обработчик после всех имеющихся обработчиков данного элемен Анатолий Саратовцев jQuery 2 08.10.2012 18:49
Как снять обработчик с очередью FanAizu jQuery 0 11.02.2012 19:28
Как удалить обработчик из себя и можно ли? Evgen1917 Events/DOM/Window 2 23.12.2010 18:21
Как "обмануть" обработчик события? itPiligrim Events/DOM/Window 0 13.05.2010 22:55