开发者

How to unbind a function from an event among multiple functions?

Say for example, we don't know how many functions already binded to an event. In that case we开发者_开发知识库 can bind our own function like below

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

Now how to unbind myOwn function alone without disturbing others?


When attaching multiple events to a DOM element, you should not change the "onfoo" attribute. Rather, use addEventListener("foo") (or attachEvent("foo") in IE). Similarly, you have removeEventListener (detachEvent in IE) to remove events.

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

Replace "onfoo" with "foo". So when you do element.onmouseup, you should instead do element.addEventListener("mouseup", ...).

It is imperative that you use a function reference, since the internal object ID of the function is used for reference, and not it's contents. This will not work:

myDomElement.addEventListener("click", function () { alert("foo") }, true)
myDomElement.removeEventListener("click", function () { alert("foo") }, true)

You can create a simple wrapper for cross browser compatibility.

var addEventListener = function (element, event, func) {
  if (element.addEventListener) {
    element.addEventListener(event, func, true);
  } else {
    element.attachEvent(event, func);
  }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜