![](/img/trans.png)
[英]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.