سؤال

لقد قمت بإنشاء عناصر HTML التي تم إنشاؤها ديناميكيًا والتي يتم استخدامها باستخدام مكونات تحميل ملف jQuery-Ajax.

أود أن يبدأ تحميل الملف بعد تحديث قيمة الإدخال. ومع ذلك ، يبدو أن Internet Explorer يتجاهل JavaScript onchange.

كيف يمكنني تحقيق ذلك في IE؟

مثال:

var html = $('<div class="add_input">'+
        '<input type="file" name="file"/></div>').change(submit);

$('#add_inputs').prepend(html);
هل كانت مفيدة؟

المحلول

يمكنك فقط استبدال ما سبق بشيء على طول هذه الخطوط

var html = $('<div class="add_input"><input type="file" name="file"/></div>');
$('#add_inputs').prepend(html);
$("div.add_input > input[name='file']").change(submit);

أو

var html = $('<div class="add_input"><input id="filer" type="file" name="file"/></div>');
$('#add_inputs').prepend(html);
$("#filer").change(submit);

نصائح أخرى

عندما تقوم بإنشاء عناصر من HTML في jQuery ، يشير المقبض الذي تم إرجاعه change معالج الأحداث على <div>, ، ليس <input>.

هذا يعمل مع ذلك في معظم المتصفحات لأنه في أحداث DOM المستوى 2 المواصفات ، و change الحدث "فقاعات" رفع المستند لإبلاغ والديه عند تغييره ، لذلك معالج الأحداث على <div> سيتم إبلاغ أي تغييرات على أي من أطفالها <input>س. ومع ذلك ، فإن IE له نموذج الحدث الخاص به الذي التغيير لا يخدع.

بديل:

($('<input type="file" name="file" />')
    .change(submit)
    .prependTo('#add_inputs')
    .wrap('<div class="add_input"></div>')
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top