【发布时间】:2010-07-06 10:45:08
【问题描述】:
下面包含的代码允许我在用户第一次将鼠标悬停在元素上然后删除事件时执行某些操作。
它在 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 抛出上述错误时,Safari 什么也没做。
【问题讨论】:
-
呸。你从哪里得到
removeEvent?看起来类似于 John Resig 的实现 (ejohn.org/blog/flexible-javascript-events),但与addEvent不对称。 -
也许我只是一个简单的人,但如果这是我的页面,我会使用一个简单的标志变量来处理一次性事件处理程序,我会在第一次调用后翻转它。如果我真的想要进行大量的事件处理,我会让一些经过良好测试的框架来处理丑陋的细节。
-
我差点再次抓住 jQuery,但这次想深入挖掘一下。总是想继续学习。
标签: javascript javascript-events event-handling