フォーム送信イベントから送信を引き起こしたボタンを取得するにはどうすればよいですか? 質問する

フォーム送信イベントから送信を引き起こしたボタンを取得するにはどうすればよいですか? 質問する

フォームの送信をトリガーした送信ボタンの値を見つけようとしています

$("form").submit(function() {

});

各ボタンに対して $("input[type=submit]").click() イベントを発生させて変数を設定することもできますが、送信時に何らかの方法でボタンをフォームから削除するよりもエレガントではないようです。

ベストアンサー1

私はdocument.activeElementこの回答で概説したように活用しました:jQuery でフォーカスされた要素を取得するにはどうすればよいでしょうか?

$form.on('submit', function() {
    var $btn = $(document.activeElement);

    if (
        /* there is an activeElement at all */
        $btn.length &&

        /* it's a child of the form */ 
        $form.has($btn) &&

        /* it's really a submit element */
        $btn.is('button[type="submit"], input[type="submit"], input[type="image"]') &&

        /* it has a "name" attribute */
        $btn.is('[name]')
    ) {
        console.log("Seems, that this element was clicked:", $btn);
        /* access $btn.attr("name") and $btn.val() for data */
    }
});

ボタンをクリックした後は常にフォーカスされた要素になるという事実を活用します。これによりないblur()クリック後に右クリックすると機能します。

@Doin は別の欠点を発見しました。ユーザーがenterテキスト フィールドで を介してフォームを送信した場合、 は設定されません。などでイベントdocument.activeElementを処理することによって、これを自分で注意する必要があります。keypressinput[type="text"]

2017-01 更新:私の図書館のためにハイパーフォーム私は使用せずactiveElement、フォームの送信につながるすべてのイベントをキャッチすることを選択しました。このコードはGithubにあります。

Hyperform を使用する場合は、送信をトリガーしたボタンにアクセスする方法は次のとおりです。

$(form).on('submit', function(event) {
  var button = event.submittedVia;
});

おすすめ記事