本文介绍了当我尝试清理一些时,为什么这个事件处理ender的代码会中断?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是正常运行的代码:
bonzo.aug({
bind: function (event, handler) {
if (this[0].attachEvent)
this[0].attachEvent('on'+event, handler);
else
this[0].addEventListener(event, handler);
},
unbind: function (event, handler) {
if (this[0].detachEvent)
this[0].detachEvent('on'+event, handler);
else
this[0].removeEventListener(event, handler);
},
once: function (event, handler) {
function doOnce(e) {
bonzo(this).unbind(event, doOnce);
handler.call(this, e);
}
this.bind(event, doOnce);
}
});
然后当我尝试整合并将其中的部分加入时, unbind
和一次
休息:
But then when I try to consolidate and soup parts of it up a little, unbind
and once
break:
(function($){
$.ieEventApi = !!window.attachEvent; // !-[1,];
$.addEventListener = $.ieEventApi ? "attachEvent" : "addEventListener",
$.removeEventListener = $.ieEventApi ? "detachEvent" : "removeEventListener",
$.onForIe = $.ieEventApi ? 'on' : '',
$.adaptEventHandlerForIe = function(f){
return function(e){
e.target = e[(e.target ? e.target : (e.srcElement || document))];
return f(e);
};
};
$.aug({
bind: function (event, handler) {
for(var i = 0; i < this.length; i++) // I'd use Bonzo.each if I could find any documentation for its use.. :-\
this[i][$.addEventListener]($.onForIe+event, $.adaptEventHandlerForIe(handler), false); // The "false" is superfluous on IE, but apparently not problematically so.
return this;
},
unbind: function (event, handler) {
for(var i = 0; i < this.length; i++)
this[i][$.removeEventListener]($.onForIe+event, $.adaptEventHandlerForIe(handler), false);
return this;
},
once: function (event, oncehandler) {
// This just calls the other two, which already handle iteration.
this.bind(event, doOnce);
return this;
function doOnce(e) {
$(e.target /*Or should I be using e.target here?*/ ).unbind(event, doOnce);
oncehandler.call(this, e);
}
}
});
})(bonzo);
推荐答案
不应该是以下行
e.target = e[(e.target ? e.target : (e.srcElement || document))];
类似于
e.target = e[e.target ? 'target' : (e.srcElement ? 'srcElement' : 'document')];
?我的意思是,当你在一个对象中引用一个道具并使用方括号时,你应该用字符串格式写出内部值。所以 e.etc
应该变成 e ['etc']
。
? I mean, when you're referring to a prop in an object and using square brackets you should write the inner value in string format. So e.etc
should become e['etc']
.
这篇关于当我尝试清理一些时,为什么这个事件处理ender的代码会中断?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!