11

onsubmit ハンドラー内からフォームを送信した要素を特定する方法はありますか? どの要素がクリックされたかを知る汎用ハンドラーを作成しようとしています。たとえば、次の形式があるとします。

<form onsubmit="onSubmitHandler">
    <input type="submit" name="submit1" />
    <input type="submit" name="submit2" />
</form>

どの送信ボタンがクリックされたかを onSubmitHandler 内で特定するにはどうすればよいですか? event.target/event.srcElement を試しましたが、実際の送信ボタンではなく、フォームが表示されます。

更新: ここでは一般的なコントロールを作成しているため、フォームに何があるかわかりません。ソリューションは、フォームの html を知らずに変更せずに機能する必要があります。私のフォールバックは、送信を引き起こす可能性のあるすべてのボタンを見つけるために DOM を歩いていますが、それは避けたいと思います。

4

5 に答える 5

3

別の解決策は、イベント トリガーをフォームの送信イベントから送信要素の onclick イベントに移動することです。

<form name='form1'>  
    <input type="submit" name="submit1" onclick="onSubmitHandler"/>
    <input type="submit" name="submit2" onclick="onSubmitHandler"/>
</form>

ハンドラー関数では、イベント ターゲットの名前を調べるだけで送信要素を特定できます。フォームの情報やその他の要素にアクセスする必要がある場合は、送信要素の "form" 属性からこれを取得できます。

于 2009-02-12T16:18:50.810 に答える
1

標準の送信ボタンタイプは使用しません。

submit 関数が、それを送信した要素を表す追加の引数を取るようにします。ボタンにはthis、パラメーターとして送信する onclick があります。

<input type="button" onclick="submitHandler(this)">
于 2009-02-12T16:45:13.493 に答える
0

このソリューションはFirefoxで機能します。他の準拠ブラウザやIEではチェックしていません。
IEにはあまり期待していません。調べて、結果を投稿する必要があります。

<form id="myForm">
    <input type="submit">
    <input type="submit">
</form>

_

document.getElementById('myForm').addEventListener( 'submit', function( e ){
    e.preventDefault();
    e.explicitOriginalTarget.style.background = 'red';
}, false );
于 2009-02-12T17:04:01.827 に答える
0

クリック イベントがバブルするので、フォーム自体に「onclick」リスナーを追加するだけで、クリック ターゲット ソースが送信ボタンかどうかを確認できます。その場合は、onsubmit ハンドラーからアクセスできるフォームに関連付けられた場所への参照を保存します。

「Enter」で送信されたフォームも適切に処理したい場合は、フォームの「onkeypress」または「onkeydown」イベントをリッスンし、「Enter」を確認し、イベントのターゲットが送信ボタンでない場合は送信ボタン情報をクリアします。 .

于 2013-05-11T18:37:42.467 に答える
0

私のフォールバックは、送信を引き起こす可能性のあるすべてのボタンを見つけるために DOM を歩いていますが、それは避けたいと思います。

...そしてクリックリスナーを追加して「最後にクリックされた」ボタンを保存し、送信リスナーによって読み取られますよね?

他に思いつきません、すみません。

于 2009-02-12T16:54:33.220 に答える