Jquery fadeOut一遍又一遍地执行回调,为什么会这样,我该如何防止这种情况?

时间:2009-08-05 15:55:23

标签: javascript jquery callback children fadeout

我的方法淡出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为div的每个子元素?

从技术上讲,它们是动画的,因为内部元素正在被外部div淡出,但是如果你在firebug中观看javascript只有外部div我渐渐消失了它的不透明度/显示变化了。

如果发生了这种情况,我该如何确保回调只执行一次?

编辑:这是numWindowsOpen--;行我没有在函数之前定义numWindowsOpen所以出于某种原因使调用多次发生...有人可以解释为什么这样发生了什么?

2 个答案:

答案 0 :(得分:0)

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

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}

答案 1 :(得分:0)

问题是numWindowsOpen在它减少之前没有被声明...好的提醒,以确保你在去更复杂的时间之前寻找类似的简单事物。