【发布时间】:2009-08-05 15:55:23
【问题描述】:
我的方法使一个 div 框淡出,并有一个调用方法的回调......像这样:
function closeWindow(windowIdPrefix, speed) {
$("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed,
function() {
resetWindow(windowIdPrefix);
numWindowsOpen--;
}
);
}
function resetWindow(windowIdPrefix) {
alert("resetting window");
}
当它执行时(onClick of a button),我在 resetWindow 中有一个警报,以查看它执行了多少次。
它似乎永远执行,但我没有坐在那里足够长的时间关闭警报窗口来找出答案。
我做了一些研究并阅读了 Jquery 文档:
回调(可选)函数
动画完成时要执行的函数,对每个动画元素执行一次。
所以我想知道,即使我只是淡出 1 个 div,它是否算作 1.. div 具有的每个子元素加 1?
从技术上讲,它们是动画的,因为内部元素随着外部 div 淡出,但如果你在 firebug 中观看 javascript,只有我淡出的外部 div 会改变不透明度/显示。
如果发生这种情况,我如何确保回调只执行一次?
编辑:这是行 numWindowsOpen--; 我没有在函数之前定义 numWindowsOpen 所以由于某种原因导致调用多次发生......谁能解释为什么会这样?
【问题讨论】:
-
你能把resetWindow的代码也贴出来吗?
-
这只是一个警告,但我还是添加了它。
-
如果你坚持使用 console.log($("#" + windowIdPrefix + "_ViewPanel").length);在 fadeOut 线之前你得到了什么? (或者如果您没有安装 firebug,请发出警报而不是 console.log)
-
我得到 1... 所以它显然应该只调用一次回调。我想知道为什么它会不断重复这样的回调。
-
对此不确定。你的代码对我来说看起来不错,所以猜它是看不见的。你能在某个地方发布一个精简版让我看看吗?或者张贴一个拉链?
标签: javascript jquery callback children fadeout