Не работает detachEvent в IE7/8
Всем привет!
Такая проблема, почему-то не работает detachEvent в IE7/8. Вот скрипты в порядке подключения
var EventHandler = {
add: function(element, eventType, handler){
if(element.addEventListener){
element.addEventListener(eventType, handler, false);
return handler;
}
var IEhandler = function(){handler.call(element);}
element.attachEvent("on"+eventType, IEhandler);
return IEhandler;
},
remove: function(element, eventType, handler){
if(element.addEventListener){
element.removeEventListener(eventType, handler, false); return;
}
element.detachEvent("on"+eventType, handler);
}
}
Дальше
EventHandler.add(window, "load", js1func);
function js1func(){
var div = document.getElementById("div1");
EventHandler.add(div, 'click', viewDiv1);
}
function viewDiv1(event){
var div = document.getElementById("div1");
EventHandler.remove(div, 'click', viewDiv1);
var evt = event || window.event
var str = "<h3>THIS:</h3>";
for(z in this){
str += z +' => '+ this[z] +"<br />";
}
str += "<h3>EVENT:</h3>";
for(z in evt){
str += z +' => '+ evt[z] +"<br />";
}
div.innerHTML = str;
}
И HTML страничка Код:
<!DOCTYPE html> |
Что-то я не понял...
Вроде как пишут, что attachEvent не передает this в функцию-обработчик. Собственно для этого и написал
var IEhandler = function(){handler.call(element);}
И поэтому и не срабатывал detachEvent потом. Но когда сделал так, все заработало
var EventHandler = {
add: function(element, eventType, handler){
if(element.addEventListener){
element.addEventListener(eventType, handler, false);
return handler;
}
element.attachEvent("on"+eventType, handler);
return handler;
},
remove: function(element, eventType, handler){
if(element.addEventListener){
element.removeEventListener(eventType, handler, false); return;
}
element.detachEvent("on"+eventType, handler);
}
}
Причем this присутствует в функции-обработчике. Где косяк? Работает во всех IE от 6 |
Нет... ошибся.
This есть, но ничего интересного в нем нет |
Цитата:
|
Как просто фикс - сохраняй ссылку на функцию-обертку в самой функции:
handler._wrapper = wrapper и детачь уже handler._wrapper. Грязный трюк конечно, но иначе только создание реестра обработчиков. Можешь еще нагуглить костыль для добавления addEventListener в IE |
danik.js,
Спасибо! Уже разобрался. Сейчас в этом копаюсь http://javascript.ru/tutorial/events/crossbrowser почти разобрался. А проблема была именно в ссылке на функцию-обработчик. Вобщем теперь все работает. :) |
| Часовой пояс GMT +3, время: 07:00. |