Удаление обработчиков установленных addEventListener,
f_AddEvent = function(v_target_o,v_name_s,v_handler_f) { if(v_target_o.addEventListener) { v_target_o.addEventListener(v_name_s,v_handler_f,false); } else if(v_target_o.attachEvent) { v_target_o.attachEvent('on'+v_name_s,v_handler_f); }; }; суть вопроса такая: - если обработчик устанавливается этой функцией - я не знаю и не имею ссылки на v_handler_f чтоб удалить обработчик методами removeEventListener("типCобытия", функцияПолучателяСобытия, захват); detachEvent("имяСобытия", ссылкаНаФункцию); мож есть какие обьекты где можно поймать список функций обработчаков для событий обьекта v_target_o, сам v_target_o не хранит такой инфы, пытался посмотреть обьект события определенного типа возникающего на данном v_target_o, (этот вариант лучше проверить нужно) пытаюсь искать информацию в обьекте obj очень просто: var str='';for(i in obj){try{str += i+' = '+obj[i]+'; ';}catch(e){};};alert(str); может как то перебрать все функции, но где взять список ссылок на все функции и не факт что они определены глобально ( v_target_o.addEventListener('click',function(){bla bla},false);) типа такого: for(i in functions_list) { try { v_target_o.removeEventListener("click", functions_list[i], false); } catch(e){}; }; Ну и еще вопрос, в каком отладчике и где можно увидеть обработчики событий установленные на элементе таким методом (функцией f_AddEvent) ? Вроде в фаербаге собирались ввести подобное. |
Если вам требуется удалить все обработчики с объекта, то делайте следующим образом. Вешайте на событие объекта свою функцию (назовем ее служебной), а те функциии, что требуются для работы складывайте в массив. При срабатывании служебной функции проходите по массиву и выполняйте навешанные функции. Чтобы исключить все функции из обработки, просто очистите массив. Для удаления обработчика исключите отдельный элемент из массива. Этим способом вы так же можете решить проблему контекста this для обработчиков событий в ie. Где хранить массив функций решайте сами.
|
Спасибо за ответ, но данный вариант не подходит, представим, что у меня универсальный скрипт который должен работать на страницах написанных не мной, здесь как раз и возникает озвученная проблема, как перехватить чужие обработчики и не нарушить работоспособность страницы.
если бы было можно потерять чужие обработчики то можно сделать так v_target_o.parentNode.innerHTML = v_target_o.parentNode.innerHTML; все обработчики внутри кода бы потерялись Вопрос этот скорее из разряда изобретения велосипеда но разобраться в таких нюансах языка будет полезно Про мониторинг событий в отладчике тож остается открытым заранее спасибо |
>разобраться в таких нюансах языка будет полезно
Язык тут ни при чем?! Это DOM. |
та не, это никакой не DOM)))
|
Та не, это всё-таки DOM.
|
а, ну если Вы имеете ввиду что это связано с объектами в DOM, их свойствами и методами, то да, мне поначалу показалось такое утверждение нелепым, потому что браузерный JS и есть связка JS и DOM, но соглашусь тогда что концептуально я неправ был - "Язык тут ни при чем?! Это DOM" спасибо, капитан очевидность.
|
Jamshut,
Обращайтесь! Всегда ваш К.О. P.S. Вообще, написал я это с предложением посмотреть стандарт DOM. |
ок ))) но вопрос интересует, хотя бы отладчик где можно смотреть обработчики поставленные таким путем
|
Jamshut,
Сам буду рад если кто-то ответит, потому как сам такого инструментария не встречал. Есть решения для различных библиотек, но решения, которое бы расширяло DOM-объекты соответсвующими коллекциями обработчиков не видел. |
Часовой пояс GMT +3, время: 17:23. |