لماذا هذا التوثيق لا يعمل ؟
-
03-07-2019 - |
سؤال
أحاول الإجابة هذا السؤال قبل بضع دقائق و أعد هذا المثال على نفسي :
<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()
!