jQuery عدة استدعاءات إلى مكالمات عد رد اتصال واحد

أحتاج إلى معاودة اتصال واحدة فقط من خلال عدة عمليات رد اتصال. مع MultiCallback بسيطة "الفئة" التي تحسب المكالمات يبدو أن تحل. ولكن وظيفة fadeIn في jQuery تستدعي mCallback مرة واحدة فقط.

يجب استدعاء mCallback 3 مرات. يحدث ذلك باستخدام وظيفة رد اتصال مباشرة داخل نطاق أعلى.

اختبرت فصول MultiCallback الخاصة بي أيضا على وظائف الخاصة بي دون أي مشاكل. اعرف هناك طرق أخرى مثل إخفاء عناصر متعددة باستخدام jQuery واحصل على رد اتصال واحد ... فقط أريد أن أعرف ما هو الخطأ في منطق بلدي.

<div id="1" style="display: none; background-color: green;"></div>
<div id="2" style="display: none; background-color: red;"></div>
<div id="3" style="display: none; background-color: blue;"></div>

<script>

    var allElements = "#1, #2, #3";
    var multiCallback = new MultiCallback( $(allElements).length, function()
            {
                console.log("NEVER ENTER CALLBACK");
            });
    $(allElements).fadeIn(400, multiCallback.mCallback());

    function MultiCallback(limit, fn)
    {
        var finishedCalls = 0;

        function mCallback()
        {
           //Just enter one time !
            if (++finishedCalls == limit)
            {
                fn();
            }
        }

        return {
            mCallback : mCallback
        }
    }

</script>
0
هدفك هو تلاشي divs في وقت واحد في الخلافة؟
وأضاف المؤلف Cranio, مصدر
تذكر أنك تستدعي ثلاثة مكالمات ، ولكن يتم تنفيذها في نفس الوقت. هذا هو السبب في أنني أسأل.
وأضاف المؤلف Cranio, مصدر
Cranio نعم أريد أن تتلاشى كل 3 divs في نفس الوقت. هل هناك شيء مثل "قفل" في ج #؟
وأضاف المؤلف MR.ABC, مصدر

2 إجابة

يتغيرون

// executes function, returns undefined, passing undefined
$(allElements).fadeIn(400, multiCallback.mCallback());

إلى

// pass a reference إلى the function
$(allElements).fadeIn(400, multiCallback.mCallback); 
0
وأضاف
شكرا هذا واضح. كان لديه كتلة.
وأضاف المؤلف MR.ABC, مصدر
  1. استبدل multiCallback.mCallback() to multiCallback.mCallback

  2. ضع شفرتك داخل $ (function() {...})؛ نظرًا لأن عناصر DOM قد تكون غير متاحة في الوقت الحالي.

رمز ثابت على jsFiddle

0
وأضاف