سؤال

نحن نكتب تطبيق ASP.NET MVC. بشكل افتراضي ، إذا كان متصفح العميل يحتوي على JavaScript ، يتم تعيين المعالج لكل نموذج على الصفحة ، بواسطة JavaScript ، ليكون أحد المرسلات التي ترسل التقديم إلى أسفل "أنبوب" Ajax (التحسين التدريجي).

ولكن ، بالنسبة لشكل واحد (على صفحة من عدة) ، أود أن يتم تجاوز/تجاهل هذا المعالج. هل هناك طريقة بسيطة للقيام بذلك؟ ربما من خلال تجاوز المعالج من خلال تحديد حدث OnSubmit الخاص بي مباشرة في DOM - أو طريقة أخرى؟

نحن نستخدم jQuery ، لذلك هذه المكتبات متاحة لي.

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

المحلول

من المرجح أن أحل هذا عن طريق تعيين بعض السمات المميزة للنموذج الذي ينكسر مع معاييرك (الوضع الذي لا ينبغي أن يكون له سلوك AJAX) - شيء مثل class="oldschool". في رمز JavaScript ، عند تثبيت معالج الأحداث على النماذج ، أود بعد ذلك التأكد من استبعاد أي نماذج بهذه العلامة الخاصة:

$('form:not(.oldschool)').submit(function() {
    // Do fancy AJAX stuff
});

تحديث: مرتب ليس لتغيير أي ملفات JavaScript الخارجية ، وإدخال السلوك الجديد ببساطة عن طريق تغيير علامة HTML ، فكر في فعل شيء مثل هذا:

<form ... onsubmit="if (typeof $ == 'function') $(this).unbind('submit');">

إنه ليس جمالًا ، لكن يبدو أنه ينجز المهمة - على الأقل في المتصفحات التي لدي هنا.

نصائح أخرى

على الرغم من أنني لست متأكدًا من أنني أفهم ما تعنيه بـ "من DOM" ، أفترض أنه لا يمكنك تغيير رمز Ajax/JS الأصلي ولكن يجب أن تكون قادرًا على إدراج القليل script علامة في مكان ما يتم تشغيله بعد الرمز الذي يعين معالج إرسال AJAX.

على افتراض أن مجموعة المعالج في النموذج $("form").submit(...) أو ما شابه يمكنك استخدام هذا

$('selectorForYourForm').unbind('submit');

نظرًا لأن هذا يتم تشغيله بعد رمز JS الأصلي ، فإنه من شأنه إلغاء ربط أي معالج بالرمز الأصلي المحدد لإجراء إرسال هذا النموذج.

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