ينفذ 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");
}

عندما يتم تنفيذ هذا (onclick of a button) ، لدي تنبيه في إعادة التعيين لمعرفة عدد المرات التي يتم فيها تنفيذها.

يبدو أنه يتم تنفيذه إلى الأبد ، لكنني لم أجلس هناك لفترة كافية لإغلاق نوافذ التنبيه لمعرفة ذلك.

قمت ببعض الأبحاث وقرأت في وثائق jQuery:

وظيفة رد الاتصال (اختياري)
وظيفة يتم تنفيذها عند اكتمال الرسوم المتحركة ، ينفذ مرة واحدة لكل عنصر الرسوم المتحركة ضد.

لذلك كنت أتساءل ، على الرغم من أنني أتلاشى فقط 1 Div ، هل يعتبر 1 .. بالإضافة إلى 1 لكل عنصر طفل يمتلكه DIV؟

من الناحية الفنية ، يتم تحريكهم لأن العناصر الداخلية يتم تلاشيها مع Div الخارجي ، ولكن إذا شاهدت JavaScript في Firebug فقط ، فإن Div الخارجي الذي أتلاشىه ، يتم تغيير عتامة/عرض.

إذا كان هذا هو ما يحدث ، فكيف أتأكد من تنفيذ رد الاتصال فقط مرة واحدة؟

يحرر: كان الخط numWindowsOpen--; لم أحدد numwindowsopen قبل الوظيفة ، وذلك لسبب ما الذي كان يحدث المكالمة عدة مرات ... هل يمكن لأي شخص أن يشرح سبب حدوث ذلك؟

هل كانت مفيدة؟

المحلول 2

كانت المشكلة أن NumWindowsopen لم يتم الإعلان عنها قبل انخفاضها هناك ... تذكير جيد للتأكد من أنك تبحث عن أشياء بسيطة من هذا القبيل قبل الذهاب إلى tihngs أكثر تعقيدًا.

نصائح أخرى

يجب استدعاء رد الاتصال فقط مرة واحدة لكل عنصر يتطابق مع المحدد. هل ترى تنبيهات متعددة عند وضع رسالة تنبيه مباشرة في رد الاتصال؟

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top