我有一个启动/停止计时器的按钮。当我单击它时,我删除当前的事件处理程序,并附加相反的事件处理程序。即,单击“停止”,并为下一次单击附加“开始”功能。
但是在IE(7)中,不确定是8.在原始函数完成后,新附加的事件也会触发:
IE7中的生命线:
按下按钮 - > “停止”功能开始 - >删除“停止”功能 - >附加“开始”功能 - > “停止”功能完成 - >调用“开始”功能。
我知道它与附加事件位有关,因为如果我将其删除,则不会触发Start事件。
这看起来有点奇怪,因为我在“开始”功能中有相同的情况,即“开始”被删除,“停止”被调用。但幸运的是,这似乎并没有引起无限循环。
if(btn.attachEvent){ btn.detachEvent("onclick", stop); btn.attachEvent("onclick", start); }else if(btn.addEventListener){ btn.removeEventListener("click", stop, true); btn.addEventListener("click", start , true); }
在FF和Chrome中一切正常。我已经改变了附加/分离的顺序,只是为了看它是否有所作为,但事实并非如此。
附录 对不起,没有涉及jQuery,Protoype等的答案。这不是我想为这个项目整合的东西。
答案 0 :(得分:2)
您应该使用切换方法:http://jsfiddle.net/QRYsS/
// get a cross-browser function for adding events, place this in [global] or somewhere you can access it
var on = (function(){
if (window.addEventListener) {
return function(target, type, listener){
target.addEventListener(type, listener, false);
};
}
else {
return function(object, sEvent, fpNotify){
object.attachEvent("on" + sEvent, fpNotify);
};
}
}());
var toggle = (function(){
var state = false;
return function(){
state = !state;
if (state) {
alert("foo");
}else{
alert("bar");
}
};
})();
on(btn, "click", toggle);