複数のsubmitボタンをonsubmitで判定する方法

複数のsubmitボタンをonsubmitで判定する方法

Posted at November 29,2018 12:03 AM
Tag:[JavaScript, jQuery]

複数のsubmitボタンをonsubmitで判定する方法を紹介します。

1.問題点

下記のように、複数のsubmitボタンが実装されたフォームがあります。

<form name="test" method="post" action="./test.cgi">
    :
  <input name="a" type="submit" value="aaa" />
  <input name="b" type="submit" value="bbb" />
  <input name="c" type="submit" value="ccc" />
</form>

フォーム送信時にonsubmit属性などを使って、どのsubmitボタンが押されたかを判定したいのですが、方法がわかりません。

ということで、複数のsubmitボタンをonsubmitで判定する方法を紹介します。

2.複数のsubmitボタンをonsubmitで判定する

複数のsubmitボタンをonsubmitで判定するには、フォームにtype="hidden"のinput要素を追加し、各ボタンにonclick属性を追加します。onclick属性ではtype="hidden"のinput要素に、ボタン毎に異なる値を設定します。

<form name="test" method="post" action="./test.cgi" onsubmit="return check_data()">
    :
  <input name="a" type="submit" value="aaa" onclick="test.key.value='aaa'" />
  <input name="b" type="submit" value="bbb" onclick="test.key.value='bbb'" />
  <input name="c" type="submit" value="ccc" onclick="test.key.value='ccc'" />
  <input name="key" type="hidden" value="" />
</form>

そしてonsubmit属性で起動する関数で、type="hidden"のinput要素の値を判定すればOKです。

<script>
function check_data() {
    if (test.key.value == 'aaa') {
      :
    }
    return true;
}
</script>

3.複数のsubmitボタンをonsubmitで判定する(jQuery)

2項のコードをjQueryで書くこともできます。jQueryであればフォームに手を加えず、エレガントに書けます。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<form name="test" method="post" action="./test.cgi">
    :
  <input name="a" type="submit" value="aaa" />
  <input name="b" type="submit" value="bbb" />
  <input name="c" type="submit" value="ccc" />
</form>
<script>
$(function(){
 
    // フォームにtype="hidden"のinput要素を追加
    $('form').append('<input name="key" type="hidden" value="" />');
 
    // ボタンクリック時、type="hidden"のinput要素に自分の値を設定
    $('input').click(function(){
        $('input[name=key]').val($(this).val());
    });
 
    // submit時、type="hidden"のinput要素の値を判定
    $('form').submit(function(){
        if($('input[name=key]').val() == 'aaa'){
          :
        }
    });
});
</script>
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)