5

私のアプリケーションには数百ページあります。ここで、フォームにイベント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()すべてのページのフォームに添付されています。

しかし、問題は、誰かが既にメソッドをonSubmitorにアタッチしている場合onLoad、それも実行する必要があることです。私のコードによると、コードは決して実行されないと思います。彼らのメソッドもチェーンするにはどうすればよいですか?

JQueryはありません。

4

2 に答える 2

4

Quirksmodeによると、あなたがしていることは実際に機能するはずです。イベントを追加するだけで、古いイベントを置き換えることはできません。そのため、onsubmitへの割り当ての代わりにaddEventListener/attachEventを使用します。

于 2009-10-23T14:18:19.793 に答える
1

受け入れられた答えは正しいですが(イベントハンドラーは追加されますが、既存のイベントハンドラーは置き換えられません)、ユーザーが期待するものではない可能性があることに注意してください。

イベントハンドラーは、他のイベントハンドラーと任意の順序で呼び出すことができます。また、onsubmitハンドラーは、サーバーへの送信をキャンセルする場合があります。したがって、送信時にページを「無効」にすると、ユーザーがそれ以上何もできないページにユーザーを残す可能性があります...

于 2010-11-22T10:35:13.860 に答える