كيفية إرفاق حدث بحدث OnSubmit من النموذج مع تسلسل الأساليب المرفقة في وقت سابق أيضًا؟
-
06-07-2019 - |
سؤال
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 إلغاء التقديم إلى الخادم. لذا ، إذا "قمت بتعطيل" الصفحة عند الإرسال ، فقد تترك المستخدم على صفحة لا يستطيع فعل أي شيء بعد الآن ...