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

StackOverflow https://stackoverflow.com/questions/1234154

Вопрос

Мой метод выгружает блок 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, который я исчезаю, получает измененную прозрачность / отображение.

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

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

Это было полезно?

Решение 2

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

Другие советы

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

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top