フォームの中でサブミットしないボタンを作成する

フォームの中でサブミットしないボタンを作成する方法を解説します。

ブラウザのデフォルトの動作は、フォームの中に、サブミットボタンあるいは、ボタンがあると、フォームをサブミットしようとします。

<form>
  <input type="text">
  <input type="submit" value="登録する">
</form>

<form>
  <input type="text">
  <button>登録する</button>
</form>

クリックしてみてください。ブラウザのデフォルトの動作であるサブミットが起こって、ページが更新されています。

フォームの中でサブミットしないボタン

現代的なWebシステム開発においては、データの更新は、ajaxを使ってJavaScriptを行いたいという要望があります。ページの遷移を起こさずに、データを更新したいためです。

そのため、フォームの中でサブミットしないボタンが欲しいですね。実は「type=button」とすると、サブミットしないボタンになります。

<form>
  <input type="text">
  <button type="button">登録する</button>
</form>

クリックしてみてください。ページの遷移が起こりませんね。

ajaxでフォームの内容を送信するサンプル

jQueryとJavaScritpで、ajaxでフォームの内容を送信するサンプルを書いてみます。これは、実際には、サーバーサイド側の実装がないので、動かないことにご注意。取得したフォームの内容は、表示してみます。名前と年齢を入力して、登録ボタンを押してください。サーバー側の実装は、何も存在しないので、セキュリティエンジニアの皆さんも安心して、押してください。

名前:
年齢:
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
  $(document).on('click', '.myform .submit', function () {
    var data = $(this).closest('form').serialize();
    
    // 内容を見てみる
    alert(data);
    
    // ajaxでフォーム委の内容を送信
    /*
      $.post('/path', data, function () {
        
      });
    */
  });
</script>

<div class="myform">
  <form>
    <div>
      名前: <input type="text" name="name">
    </div>
    <div>
      年齢: <input type="text" name="age">
    </div>
    <div>
      <button type="button" class="submit">登録する</button>
    </div>
  </form>
</div>

Perl開発者のためのWebデザイン入門の紹介