Raphael提供的函数例如element.unclick(handler)(实际上调用了eve.unbind(event, handler)),允许您通过事件处理程序删除处理程序,但如何解除所有事件处理程序的绑定呢?
Raphael提供的函数例如element.unclick(handler)(实际上调用了eve.unbind(event, handler)),允许您通过事件处理程序删除处理程序,但如何解除所有事件处理程序的绑定呢?
Raphael.el.unbindAll = function(){
while(this.events.length){
var e = this.events.pop();
e.unbind();
}
}
然后解除一个元素的所有事件绑定
mypath.unbindAll();
我找到了一种解决方法,即替换raphael.js的源代码。
将第2031行中的代码替换为:
R["un" + eventName] = elproto["un" + eventName] = function (fn) {
var events = this.events,
l = events.length;
while (l--) if (events[l].name == eventName && || events[l].f == fn) {
events[l].unbind();
events.splice(l, 1);
!events.length && delete this.events;
return this;
}
return this;
};
使用这个
R["un" + eventName] = elproto["un" + eventName] = function (fn) {
var events = this.events,
l = events.length;
while (l--) if (events[l].name == eventName && (!fn || events[l].f == fn) ) {
events[l].unbind();
events.splice(l, 1);
!events.length && delete this.events;
return this;
}
return this;
};
目前,如果未提供处理程序函数来解绑函数,则会解绑该事件的所有处理程序函数。
使用示例 element.unclick();
(对于其他事件,例如element.unmouseout()
也是如此)