以前にアタッチされたメソッドを連鎖させたフォームのonSubmitイベントにイベントをアタッチするにはどうすればよいですか?

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

質問

実際、私のアプリケーションには何百ものページがあります。今、フォームの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ハンドラーはサーバーへの送信をキャンセルする場合があります。そのため、「無効」にすると送信時にページを表示すると、ユーザーはそれ以上何もできないページに移動する可能性があります...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top