次のようなフォームがいくつかあります。
<form id=myForm onsubmit="saveFormData(this);return false">
....
</form>
送信すると、カスタム関数が実行され、デフォルト アクション (http を介してデータを送信する) がキャンセルされます。
しかし今、フォームを検証する必要があり、それが正常に検証された場合は、カスタム関数をトリガーします (saveFormData
この場合、他のフォームでは異なる場合があります)。それ以外の場合は何もしません。
したがって、最終的なイベント ハンドラーは次のように動作する必要があります。
$('#myForm').submit(function(){
if(formValidatesOk(this))
saveFormData() ;
return false ;
}
ただし、HTML コードを変更することはできないため、ハードコーディングされたハンドラーを jquery イベント ハンドラーでラップして、onsubmit イベントを再定義する一般的な方法が必要です。
私の頭に最初に浮かぶのは(未テスト)のようなものです:
var hardcodedHandler = $('#myForm').prop('onsubmit') ; // save the current handler
$('#myForm').prop('onsubmit',null) ; // remove the current handler
$('#myForm').submit(function(){
if(formValidatesOk(this)) // if the form is valid then...
Function(hardcodedHandler).call(this) ; // trigger the original handler
return false ;
}) ;
しかし、それはあまりエレガントではありません (控えめに言っても)。
それを行うより良い方法を知っていますか?