Jquery fadeOut выполняет обратный вызов снова и снова, почему это так и как я могу предотвратить это? - PullRequest
0 голосов
/ 05 августа 2009

Мой метод выгружает блок div и имеет обратный вызов, который вызывает метод ... как это:

function closeWindow(windowIdPrefix, speed) {
    $("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed,
        function() {
            resetWindow(windowIdPrefix);
            numWindowsOpen--;
        }
    );
}

function resetWindow(windowIdPrefix) {
   alert("resetting window");
}

Когда это выполняется (по нажатию кнопки), у меня появляется предупреждение в resetWindow, чтобы увидеть, сколько раз оно выполняется.

Кажется, это выполняется вечно, но я не сидел там достаточно долго, закрывая окна оповещений, чтобы выяснить это.

Я провел некоторые исследования и прочитал документацию по Jquery:

обратный вызов (необязательно) Функция
Функция, выполняемая при завершении анимации, выполняется один раз для каждого анимированного элемента против .

Так что мне было интересно, хотя я только затухаю 1 div, он считается как 1 .. плюс 1 для каждого дочернего элемента, который имеет div?

Технически они анимируются, потому что внутренние элементы исчезают с помощью внешнего div, но если вы смотрите javascript в firebug, только внешний div, который я исчезаю, получает свою непрозрачность / измененный дисплей.

Если это то, что происходит, как мне сделать так, чтобы обратный вызов выполнялся только один раз?

Редактировать: Это была строка numWindowsOpen--; Я не определил numWindowsOpen перед функцией, поэтому по какой-то причине этот вызов выполнялся несколько раз ... Может кто-нибудь объяснить, почему это происходит?

Ответы [ 2 ]

0 голосов
/ 25 августа 2009

Проблема заключалась в том, что numWindowsOpen не был объявлен до того, как он там был уменьшен ... Хорошее напоминание, чтобы убедиться, что вы ищите такие простые вещи, прежде чем перейти к более сложным tihngs.

0 голосов
/ 05 августа 2009

Обратный вызов должен вызываться только один раз для каждого элемента, соответствующего селектору. Видите ли вы несколько предупреждений при помещении сообщения с предупреждением прямо в обратный вызов?

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