2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

formのsubmit時にdata-loading-textを適切に有効にする

Posted at

フォームの送信ボタンの二度押しを防ぎたい

必要なもの

  • Bootstrap 3
  • jQuery

やっていること

  • フォームの送信時にsubmitのボタンをdisableにしてローディング表示に変更し、二度押しを防ぐ
  • HTML5のバリデーションにも対応する
  • いちいちフォームにスクリプトを適用するのが面倒なので、submitボタンにクラス設定をするだけで使えるようにする(便利!

ポイント

  • input要素の checkValidity() を適切に処理しないと、requiredな要素などがあった場合に対処できない
    • input要素がエラーになっているのに、ボタンだけがローディング中になってしまう
  • input[type="submit"] でも button でも対応可能
    • classに btn と loading-button の指定が必須

コード

app.js
$(function () {
    // submitボタンにloading-buttonクラスを設定した場合、
    // 親フォームが送信される際に data-loading-text の表示に変え、
    // ボタンの二通しを防ぐ
	$('.loading-button').on('click', function () {
        var form = $(this).parents('form:first');

        // フォーム内の各要素がvalidな時だけローディング表示にする
        var valid = true;
        $(form).find(':input').each(function() {
            valid &= this.checkValidity();
        })

        if (valid) {
            var $this = $(this);
            $this.button('loading');
        }
    });
});
form.html
<script src="jquery.js"></script>
<script src="bootstrap.js"></script>
<script src="app.js"></script>

<link href="bootstrap.css" rel="stylesheet">

<form>
    <input type="text" required="required">

    <input type="submit" 
    class="btn loading-button"
    data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> 登録しています"
    value="登録する">
</form>
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?