比如说,我们不知道已经绑定到事件的功能有多少。在这种情况下,我们可以绑定我们自己的函数,如下所示
var old = (element.onclick) ? element.onclick : function () {};
element.onclick = function () {old(); myOwn()};
现在如何在不打扰别人的情况下单独取消绑定myOwn功能?
答案 0 :(得分:2)
将多个事件附加到DOM元素时,不应更改“onfoo”属性。相反,在IE中使用addEventListener("foo")
(或attachEvent("foo")
)。同样,您有removeEventListener
(IE中为detatchEvent
)来删除事件。
var myEventHandler = function (e) {
alert("do stuff");
}
var myDomElement = document.getElementById("my_id");
myDomElement.addEventListener("click", myEventHandler, true);
myDomElement.attachEvent("click", myEventHandler); // IE
myDomElement.removeEventListener("click", myEventHandler, true);
myDomElement.detachEvent("click", myEventHandler); // IE
将“onfoo”替换为“foo”。因此,当您执行element.onmouseup
时,您应该执行element.addEventListener("mouseup", ...)
。
必须使用函数引用,因为函数的内部对象ID用于引用,而不是它的内容。这不起作用:
myDomElement.addEventListener("click", function () { alert("foo") }, true)
myDomElement.removeEventListener("click", function () { alert("foo") }, true)
您可以创建一个简单的包装器,以实现跨浏览器兼容性。
var addEventListener = function (element, event, func) {
if (element.addEventListener) {
element.addEventListener(event, func, true);
} else {
element.attachEvent(event, func);
}
}