[英]Why does my code break when I try to attach my methods to the class prototype?
[英]Why does this event handling code for ender break when I try to clean it up some?
这是正常工作的代码:
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
并once
突破:
(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']
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.