如何从多个函数中的事件中解除函数?

时间:2010-02-18 10:04:42

标签: javascript

比如说,我们不知道已经绑定到事件的功能有多少。在这种情况下,我们可以绑定我们自己的函数,如下所示

var old = (element.onclick) ? element.onclick : function () {};
element.onclick = function () {old(); myOwn()};

现在如何在不打扰别人的情况下单独取消绑定myOwn功能?

1 个答案:

答案 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);
  }
}