سؤال

أحاول الإجابة هذا السؤال قبل بضع دقائق و أعد هذا المثال على نفسي :

<script>
  function trialMethod()
  {
    alert('On Submit Run!'); return true;
  }
  function trialMethod2()
  {
    alert('On Submit Run trialMethod2!'); return true;
  }
</script>

<form id="aspnetForm" onsubmit="trialMethod();">
    <input type="submit">
</form>

لماذا أول توثيق لا يعمل :

<input type="button" id="btnTrial1" value="UNBIND 1" 
   onclick="$('#aspnetForm').unbind('submit', trialMethod);">

ولكن هذا واحد يعمل من أجل trialMethod2 الطريقة :

<input type="button" id="btnTrial2" value="UNBIND 2" 
   onclick="$('#aspnetForm').bind('submit', trialMethod2).unbind('submit', trialMethod2);">
هل كانت مفيدة؟

المحلول

وأول سيناريو إلغاء التوثيق لا يعمل، لأن من طراز حدث مسج ل. مسج يخزن كل وظيفة معالج الأحداث في مجموعة التي يمكنك الوصول إليها عبر $("#foo").data('events'). تبدو وظيفة unbind لمجرد وظيفة معينة في هذه المجموعة. لذلك، يمكنك فقط معالجات الأحداث unbind() التي تمت إضافتها مع bind()

نصائح أخرى

لا يجب على أي مزيج من العلامات مع تفاعلها رمز إذا كانت باستخدام مسج.

إضافة بعض جافا سكريبت على الصفحة مثل هذه:

$(function() {
    $('#aspnetForm').bind('submit',function() {
        trialMethod();
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').unbind('submit');
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').bind('submit', trialMethod2).unbind('submit');
    });
});

الآن, مع أن الخروج من الطريق...كل شيء يجب أن تعمل الآن (على الرغم من أنك سوف تكون الآن انقر نقرا مزدوجا ملزم #aspnetForm قبل غير ملزم تماما عند الثانية الضغط على زر).المشكلة أن الشكل لم يكن حقا 'ملزمة' لتبدأ.يمكنك توثيق onsubmit المعلمات في العلامات.

ويمكنك إلغاء التوثيق عن طريق إزالة السمة المقابلة:

 $('#aspnetForm').removeAttr('onsubmit');

وأنا واجهت مشكلة مشابهة من قبل. ما استنتجت هو أن تتمكن من توثيق فقط وسيلة لديك binded. منذ trialmethod () لم يكن binded من خلال مسج، داعيا UNBIND على طريقة لن يعمل.

واسمحوا لنا أن نعرف إذا تجد مخرجا من قبل أي فرصة.

وشكرا.

وهناك خلل مع ربط إلغاء التوثيق وتشكيل تقديم العمل:

إذا قمت بربط ثم توثيق، وتريد أن تقدم النموذج الخاص بك، لا يمكنك استخدام $(form).submit()، ولكن $(form INPUT[type=submit]).click()!

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