This is a partial code, not the full version.
I have a highlighter that highlights a specific html element when the mouse hovers.
I also have a click event and listener.
My problem is : the highlighter event/listener does not detach when using Internet Explorer v6 v7 v8 v9
What am I doing wrong?
This is how I attach the event and start the event listener:
if (document.body.addEventListener) {
//alert(11);
document.body.addEventListener('mousemove', handler, false);
} else if (document.body.attachEvent) {
//alert(12);
var ff=function(e) {
return handler(e || window.event);
};
//alert(ff);
document.body.attachEvent('onmousemove', ff);
} else {
//alert(13);
document.body.onmousemove = handler;
}
This is how I stop the onmousemove
/mouse
event/listener :
if (document.body.removeEventListener) {
document.body.removeEventListener('mousemove', handler, false);
} else if (document.body.detachEvent) {
document.body.detachEvent('onmousemove', function(e) {
return handler(e || window.event);
});
} else {
document.body.removeAttribute("onmousemove");
}
This is how I stop the onclick
/click
event/listener:
if (document.body.removeEventListener) {
document.body.removeEventListener('click', ClosetAffairHighlighter.highlightClick, false);
} else if (document.body.detachEvent) {
document.body.detachEvent('onclick', ClosetAffairHighlighter.highlightClick);
} else {
document.body.removeAttribute("onclick");
}
This is a partial code, not the full version.
I have a highlighter that highlights a specific html element when the mouse hovers.
I also have a click event and listener.
My problem is : the highlighter event/listener does not detach when using Internet Explorer v6 v7 v8 v9
What am I doing wrong?
This is how I attach the event and start the event listener:
if (document.body.addEventListener) {
//alert(11);
document.body.addEventListener('mousemove', handler, false);
} else if (document.body.attachEvent) {
//alert(12);
var ff=function(e) {
return handler(e || window.event);
};
//alert(ff);
document.body.attachEvent('onmousemove', ff);
} else {
//alert(13);
document.body.onmousemove = handler;
}
This is how I stop the onmousemove
/mouse
event/listener :
if (document.body.removeEventListener) {
document.body.removeEventListener('mousemove', handler, false);
} else if (document.body.detachEvent) {
document.body.detachEvent('onmousemove', function(e) {
return handler(e || window.event);
});
} else {
document.body.removeAttribute("onmousemove");
}
This is how I stop the onclick
/click
event/listener:
if (document.body.removeEventListener) {
document.body.removeEventListener('click', ClosetAffairHighlighter.highlightClick, false);
} else if (document.body.detachEvent) {
document.body.detachEvent('onclick', ClosetAffairHighlighter.highlightClick);
} else {
document.body.removeAttribute("onclick");
}
Share
Improve this question
edited Aug 23, 2021 at 20:11
Brian Tompsett - 汤莱恩
5,89372 gold badges61 silver badges133 bronze badges
asked Oct 18, 2012 at 7:45
Ionut Flavius PogacianIonut Flavius Pogacian
4,80115 gold badges61 silver badges101 bronze badges
2 Answers
Reset to default 14base on this article, a cross-browser event handler can be :
var EventUtil = {
addHandler: function(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent("on" + type, handler);
} else {
element["on" + type] = handler;
}
},
removeHandler: function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.detachEvent) {
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
}
}
};
You need to pass to detachEvent
the function you added with attachEvent
. In your code you're passing a new one (they have the same toString()
and would do the same thing but they're not the same).
You should make ff
global with
var ff;
if (document.body.addEventListener) {
document.body.addEventListener('mousemove', handler, false);
} else if (document.body.attachEvent) {
ff=function(e) {
return handler(e || window.event);
};
and then call
else if (document.body.detachEvent) {
document.body.detachEvent('onmousemove', ff);
}
to remove the listener in old IE.
Note : I'm really doubtful about the document.body.removeAttribute("onclick");
: is there really a case in which this would be useful ?