以前にアタッチされたメソッドを連鎖させたフォームのonSubmitイベントにイベントをアタッチするにはどうすればよいですか?
-
06-07-2019 - |
質問
実際、私のアプリケーションには何百ものページがあります。今、フォームのonSubmitにイベント「disablePage」を添付する必要があります。各ページに行って次のように書きたくありません:
<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にメソッドをアタッチしている場合、それも実行する必要があるということです。そして、私のコードによると、コードは決して実行されないと思います。 メソッドもチェーンするにはどうすればいいですか?
JQueryは使用しないでください
解決
Quirksmode によると、実際に動作するはずです。イベントを追加するだけで、古いものを置き換える必要はありません。そのため、onsubmitへの割り当ての代わりにaddEventListener / attachEventを使用します。
他のヒント
注意:受け入れられた答えは正しいですが(イベントハンドラーが追加されますが、既存のイベントハンドラーは置き換えられません)、ユーザーが期待するものではない場合があります。
イベントハンドラーは、他のイベントハンドラーと任意の順序で呼び出すことができます。また、onsubmitハンドラーはサーバーへの送信をキャンセルする場合があります。そのため、「無効」にすると送信時にページを表示すると、ユーザーはそれ以上何もできないページに移動する可能性があります...
所属していません StackOverflow