كيفية إرفاق حدث بحدث OnSubmit من النموذج مع تسلسل الأساليب المرفقة في وقت سابق أيضًا؟

StackOverflow https://stackoverflow.com/questions/1613744

سؤال

actaully طلبي لديه مئات الصفحات. الآن يجب أن أرفق حدث "DisablePage" على OnSubmit من النموذج. لا أريد الذهاب إلى كل صفحة وأكتب:

<form name="frmname" onSubmit="disablePage();">

ما أفعله الآن هو:-

مقتطفات من ملف common.js ؛ [مدرجة في جميع الصفحات

/* we have to attach 'attachFormSubmit' method on onLoad event, 
   otherwise forms[0] will always be null. If there is any alternative, 
   then please suggest one */
if (window.addEventListener){   
    window.addEventListener('load', attachFormSubmit, false); 
} else if (window.attachEvent){ 
    window.attachEvent('onload', attachFormSubmit );
}

function attachFormSubmit(){
    forms = document.getElementsByTagName('Form');  
    if ( forms[0] ){  // there is only one form in all pages    
        if (forms[0].addEventListener){         
            forms[0].addEventListener('submit', disablePage, false); 
        } else if (forms[0].attachEvent){           
            forms[0].attachEvent('onsubmit', disablePage);
        }
    }
}

function disablePage(){     
    document.getElementById("pageHideDivID").style.display='inline';        
}

حتى هذه النقطة ، كل شيء على ما يرام ، يتم إرفاق DisablePage () بأشكال جميع الصفحة.

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

No JQuery please

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

المحلول

وفق وضع المراوغات ما تفعله يجب أن يعمل بالفعل. يجب أن تضيف الأحداث الخاصة بك فقط وعدم استبدال الأحداث القديمة. لهذا السبب تستخدم AddEventListener/AttachEvent بدلاً من تعيين OnSubmit.

نصائح أخرى

لاحظ أنه على الرغم من أن الإجابة المقبولة صحيحة (تتم إضافة معالج الحدث ، فإنه لا يحل محل معالج الأحداث الحالي) ، فقد لا يكون ما يتوقعه المستخدم:

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

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