我有下面的代码,它允许我在用户第一次将元素放在元素上然后移除事件时执行某些操作。IE中的事件处理
它在W3C事件模型浏览器中玩的很好,但在IE6-8中一直抛出一个错误。我从另一个问题得到了代码,并相信它会处理IE。任何人看到我做错了什么?
<script type="text/javascript">
function setMouseEvent() {
//Tel: 01 8279 400
event = addEvent(document.getElementById('contactButton'), 'mouseover', changeText);
}
function changeText() {
alert("worked!");
removeEvent(document.getElementById('contactButton'), 'mouseover', changeText);
}
function addEvent(obj, type, fn) {
if (typeof obj.addEventListener != undefined) {
obj.addEventListener(type, fn, false);
}
else if (typeof obj.attachEvent != undefined) {
obj.attachEvent("on" + type, fn);
}
}
function removeEvent(obj, type, fn) {
if (typeof obj.addEventListener != undefined) {
obj.removeEventListener(type, fn, false);
}
else if (typeof obj.attachEvent != undefined) {
obj.detachEvent("on" + type, obj[type + fn]);
obj[type + fn] = null;
obj["e" + type + fn] = null;
}
}
window.onload = setMouseEvent;
</script>
更新:我只是在最新的Chrome,Opera和FF没有问题的测试,但Safari浏览器也没有,当我鼠标悬停和IE浏览器的onload抛出错误提到。
呸。你从哪里得到'removeEvent'?看起来类似于John Resig的实现(http://ejohn.org/blog/flexible-javascript-events/),但与'addEvent'不对称。 – 2010-07-06 10:53:11
也许我只是一个傻瓜,但如果这是我的页面,我会用一个简单的标志变量处理一次性事件处理程序,我会在第一次调用后翻转它。如果我真的想做很多事件争吵,我会让一些经过良好测试的框架处理丑陋的细节。 – Pointy 2010-07-06 12:02:17
我很接近只是再次抓住jQuery,但这次想挖一点点。一直想继续学习。 – 2010-07-06 21:30:49