سؤال

لدي وظيفة ماذا يلي

function test() {
    document.getElementById("main").innerHTML="show wait";

    // do stuff

    document.getElementById("main").innerHTML="show finished";
}

في FF ، سيعرض Div "Show Wait" ، قم بعمل الأشياء الأخرى لمدة 4 ثوانٍ ثم عرض "العرض"

في IE سوف تظهر فقط "العرض الانتهاء". إذا وضعت تنبيهًا () بعد أو قبل "افعل الأشياء" ، فسيظهر "عرض الانتظار".

ماذا يمكنني أن أفعل لحلها ، وأنا أعلم أنه يمكنني تقسيم الوظيفة ، وأي حلول أخرى؟

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

المحلول

اقرأ تفسير ريتشارد لسبب عدم عمله. أما بالنسبة للحل ، فإن الاختراق السريع:

function test() {
    document.getElementById("main").innerHTML="show wait";

    setTimeout(function(){
        // do stuff

        document.getElementById("main").innerHTML="show finished";
    },1)
}

السبب في أن هذا يعمل setTimeout يحدد رمز "do Stuff" الذي سيتم تنفيذه لاحقًا وبالتالي السماح للمتصفح بالخروج من وضع تنفيذ البرنامج النصي وإدخال وضع عرض DOM بحيث يكون "show wait" يمكن رسم النص على الشاشة.

نصائح أخرى

لا يعرض IE أي تحديثات حتى تقوم بإرجاع سلسلة التحكم إلى المتصفح. ستؤدي مكالمة لتنبيه ذلك (البرنامج النصي الخاص بك ينتظر إجراء المستخدم).

إما أن لا تعتمد على تغييرات واجهة المستخدم المرئية بينما يكون لديك مؤشر ترابط التنفيذ ، أو القيام بشيء مثل استخدام مؤقت لمتابعة الجزء الثاني من البرنامج النصي بعد (بإيجاز) لإعادة مؤشر ترابط التنفيذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top