0

我的方法淡出一个 div 框并有一个调用方法的回调......像这样:

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 的那一行,所以由于某种原因导致调用多次发生......谁能解释为什么会这样?

4

2 回答 2

0

对于匹配选择器的每个元素,只应调用一次回调。将警报消息直接放在回调中时,您是否看到多个警报?

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
于 2009-08-05T16:02:01.587 回答
0

问题是 numWindowsOpen 在它在那里被递减之前没有被声明......很好的提醒,以确保你在去更复杂的tihngs之前寻找简单的东西。

于 2009-08-25T17:14:08.423 回答