سؤال

لم يتم تشغيل مستمع حدث النموذج الأولي الذي أستخدمه للتغييرات في قوائم مختارة في IE.

Event.observe('use_billing', 'change', Checkout.getBillingData);

هذا يعمل بشكل جيد في Firefox (بالطبع) ، ولكن لا شيء يحدث في IE (بالطبع) - لقد كنت غوغلي هذا لبعض الوقت ، لكنني لم أجد حلاً مناسبًا لهذه المشكلة. قرأت أن هناك مشاكل ، لكنني لم أجد شيئًا مفيدًا للتحايل على القضية والحصول على هذا العمل.

أحاول حقًا تجنب استخدام مشغلات الأحداث المضمّنة ، لأنها فهي وجعل وثيقة فوضوية عرضة للأخطاء:

<select id='use_billing' onchange="Checkout.getBillingData();">....</select>

أي أفكار ستكون رائعة - هذا هو الشيء الوحيد الذي يمنع هذا المشروع من الانتقال من الإصدار التجريبي إلى الإنتاج.

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

المحلول 2

لقد وجدت السبب - لم يكن مشكلة التركيز ، اتضح أن لدي اسم عنصر النموذج وقيم المعرف هو نفسه - لقد غيرت قيمة المعرف وكل شيء يعمل بشكل جيد.

نصائح أخرى

هذه مشكلة شائعة مع IE. لا تطلق النار change الأحداث حتى يفقد العنصر التركيز.

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

لقد عملت حول هذه المشكلة من قبل من خلال الاستماع أيضًا لأحداث أخرى مثل click أو keydown. يمكنك إضافة شيك إلى رد الاتصال الخاص بك للتأكد من أن القيمة تختلف فعليًا عن من قبل للتأكد من أنك لا تقوم بمعالجة الحدث مرات أكثر من اللازم (لأن المتصفحات الأخرى ستطلق النار على حد سواء click و change في نفس الوقت إذا انقروا على قيمة جديدة).

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

في الوظيفة التي يتم إطلاقها ، تم نقل حجة الحدث من النموذج الأولي. للحصول على قيمة مربع النص (الذي أثار الحدث) في Firefox الذي تستخدمه eventArg.currentTarget.value

ولكن في IE يجب أن تستخدم eventArg.srcElement.value

لذلك لكي تعمل في كلا المتصفحين ، يجب عليك استخدام ...

var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}

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