我有下面的代碼,它允許我在用戶第一次將元素放在元素上然後移除事件時執行某些操作。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