جافا سكريبت:السيناريو يحتاج إلى الانتظار عنصر تحميل

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

سؤال

معلومات خلفية:
لدي وظيفة عندما دعا يخلق حدد القائمة داخل شكل بملء ذلك.بعد ذلك تشغيل البرنامج النصي من خلال الخيارات في قائمة ويبحث عن قيمة معينة.إذا كانت القيمة هناك ، script 'وتختار' هذا الخيار.

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

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

شكرا مقدما على أي مساعدة

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

المحلول 4

حسنا, لدي أخيرا إصلاح المشكلة.كان الحل مختلفة تماما عن ما تم مناقشته هنا.في الأساس كنت تستخدم خيار جديد(قيمة النص)' لإضافة خيارات القائمة.انتهى رمي في البيان إذا و عندما تعادل قيمة ما احتاجه هو استخدام خيار جديد(قيمة النص ، صحيح).وأن حل المشكلة.في كل يوم عمل.

نصائح أخرى

باستخدام تأخير غير موثوق بها.مهما كنت تستخدم لملء حدد القائمة استدعاء الدالة مباشرة عند الانتهاء من ذلك.

بالتناوب:

حيث لا يوجد "onload" الحدث من أجل تحديد كل ما عليك أن تفعل ذلك حقا لها وظيفة التي تطلق على نفسها بعد مهلة.إذا كان طول البنود في قائمة select قد تغير من الصفر, تعلم شيئا حاليا بإضافة البنود (نقطة البداية).إن نقطة البداية تم التوصل إلى لا شيء تغير بعد مهلة, يمكنك أن تفترض البنود قد توقفت عن كونها تضاف إلى قائمة حتى يمكنك بعد ذلك تشغيل وظيفة ثانية.

كيف حالك الخاص بك اياكس الاتصال ؟ معظم اياكس المكتبات توفر آلية للقيام رد على الانتهاء بنجاح.على سبيل المثال في مسج:

$("#myList").load("ajax.url", function(){
   //your content has been loaded, so you can do your selection logic here
});

إذا كنت التعامل مع اياكس رد يدويا & بناء الخاصة بك قائمة في جافا سكريبت, ثم كنت بالفعل رمز يعرف عند الانتهاء من قائمة, بحيث يمكنك فقط لا اختيار جزء بمجرد أن انتهى بدلا من وظيفة منفصلة (مثل zyeming اقترح).

إذا كان هذا لا يساعد ، قد يكون من المفيد نشر بعض التعليمات البرمجية حيث الناس يمكن أن تعطيك إجابة أكثر تحديدا.

لماذا لا تجعل الدالة التي يختار الخيار وظيفة رد اتصال.وسوف تكون الدعوة في نهاية الدالة التي يخلق القائمة.E. g.

function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}

ملاحظة:قد لا يكون مثل هذا ولكن أعتقد أن كنت قد حصلت على فكرة...

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