Javascript jqueryfadeout一次又一次地执行回调,为什么会出现这种情况,如何防止这种情况?
我的方法淡出一个div框,并有一个调用方法的回调。。。像这样:Javascript jqueryfadeout一次又一次地执行回调,为什么会出现这种情况,如何防止这种情况?,javascript,jquery,callback,children,fadeout,Javascript,Jquery,Callback,Children,Fadeout,我的方法淡出一个div框,并有一个调用方法的回调。。。像这样: function closeWindow(windowIdPrefix, speed) { $("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed, function() { resetWindow(windowIdPrefix); numWindowsOpen--; } ); } fu
function closeWindow(windowIdPrefix, speed) {
$("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed,
function() {
resetWindow(windowIdPrefix);
numWindowsOpen--;
}
);
}
function resetWindow(windowIdPrefix) {
alert("resetting window");
}
当它执行一次点击按钮时,我在resetWindow中有一个警报,以查看它执行了多少次
它似乎会永远执行,但我还没有坐在那里足够长的时间关闭警报窗口来发现
我做了一些研究并阅读了Jquery文档:
回调可选函数
每当动画完成时要执行的函数,对动画所针对的每个元素执行一次
所以我想知道,即使我只淡出1个div,它算不算1。。div的每个子元素加1
从技术上讲,它们是动画的,因为内部元素随着外部div淡出,但是如果你在firebug中观看javascript,只有我淡出的外部div会改变它的不透明度/显示
如果发生这种情况,如何确保回调只执行一次
编辑:这是numWindowsOpen-行;我在函数之前没有定义numWindowsOpen,所以出于某种原因,调用会多次发生。。。有人能解释为什么会发生这种情况吗?对于与选择器匹配的每个元素,只能调用一次回调。将警报消息直接放入回调时是否会看到多个警报
function() {
alert('Test');
resetWindow(windowIdPrefix);
numWindowsOpen--;
}
问题是numWindowsOpen在那里被减量之前并没有被声明。。。很好的提醒您,在进入更复杂的tihngs之前,请确保查找类似的简单内容。您也可以发布resetWindow的代码吗?这只是一个警报,但我还是添加了它。如果您坚持使用控制台。log$+windowIdPrefix+\u ViewPanel.length;在淡出线之前你得到了什么?或者,如果您没有安装firebug,请执行警报而不是console.log我得到1。。。因此,它显然应该只调用回调一次。我想知道为什么它会不断地重复这样的回调。对此我不确定。你的代码在我看来很好,所以我猜它是看不见的。你能把一个精简版贴在什么地方让我看看吗?或者发布一个zip?添加警报“测试”;使测试警报一次,无论淡出是否在那里。根据您编写的没有淡出的resetWindow函数,它只执行一次。只有当淡出在那里时,resetWindow才会执行多次