現在この投稿に設定したタグの技術を使ってログイン画面の実装をしています。
質問があるのですが、
結論から言うと、
submitボタンの二重送信防止を実装したいのですがどう実装すればいいでしょうか?
テキストボックスにカーソルがある場合などでもenterキーでのボタン押下を対応するために<input type="submit">
を適用しています。
そうするとEnterを押すたびに、または押下するたびにsubmitされるので二重送信防止処理を入れたいです。
調べて、以下のコードのように一度submitするとdisabledにする処理を入れているのですが、実際に動かしてみるとうまくいきません。
submitボタンの二重送信防止の一般的な方法やアドバイスいただければと思います。
ちなみにユーザビリティ上Enterキーでの押下可能にしたいので<input type="button">
ではなく、<input type="submit">
で実装したいです。またスマホ対応も念頭に入れています。
どうぞ宜しくお願い致します。
html
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8"> 5<title>jQueryのsubmit()サンプル</title> 6<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> 7</head> 8<body> 9<style> 10p { 11 font-size: 13px; 12} 13</style> 14<p>「送信」をクリックすると確認ダイアログが出ます。</p> 15<form action="" method="post"> 16 <input type="text" name="textBox"> 17 <input type="submit" name="send" id="submit"> 18</form> 19<script> 20$(function() { 21 $('form').submit(function() { 22 //$("#submit").attr("disabled", true); //disabledにならない 23 //$(this).find(':submit').attr('disabled', 'disabled'); //disabledにならない 24 //$(this).find(':submit').attr('visibility', 'hidden'); //disabledにならない 25 if (!confirm('送信しますか?')) { 26 return false; 27 } 28 }); 29}); 30</script> 31 32 33</body> 34</html> 35
追記
未だ非活性処理がうまくいっていません。
form属性にあるdata-disableがtrueになりません。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jQueryのsubmit()サンプル</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> </head> <body> <style> p { font-size: 13px; } </style> <p>「送信」をクリックすると確認ダイアログが出ます。</p> <form action="" method="post" data-disable="false"> <input type="text" name="textBox"> <input type="submit" name="send" id="submit"> </form> <script> $(function() { $('form').submit(function() { var form = $(this); if (form.data('disable')) { event.preventDefault(); } else { form.data('disable', true); } }); }); </script> </body> </html>
追記2
先ほどの書き方でロジックはいけていたようです。
data-disableは開発ツールのElementsではtrueになりませんでした。
が、alertを追記してわかりやすくした結果、data-disableの値はちゃんと変わっていたようです。
html
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8"> 5<title>jQueryのsubmit()サンプル</title> 6<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> 7</head> 8<body> 9<style> 10p { 11 font-size: 13px; 12} 13</style> 14<p>「送信」をクリックすると確認ダイアログが出ます。</p> 15<!doctype html> 16<meta charset="utf-8"> 17<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> 18<form action="" method="post" data-disable="false"> 19 <input type="text" name="textBox"> 20 <input type="submit" name="send" id="submit"> 21</form> 22<script> 23 $(function() { 24 $('form').submit(function() { 25 var form = $(this); 26 // if (form.hasClass('mou-tsukaenai')) { 27 if (form.data('disable')){ 28 event.preventDefault(); 29 alert('このフォームはもう使えません'); 30 } else { 31 // form.addClass('mou-tsukaenai'); 32 form.data('disable', true); 33 // テストのため、通常の送信もキャンセルする 34 alert('送信しました'); 35 event.preventDefault(); 36 } 37 }); 38 }); 39</script> 40 41 42</body> 43</html>

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/17 10:38
退会済みユーザー
2018/03/17 11:21 編集
2018/03/17 15:24 編集
退会済みユーザー
2018/03/17 15:37 編集
2018/03/17 15:42
退会済みユーザー
2018/03/17 15:49
2018/03/17 16:17
2018/03/19 07:42
退会済みユーザー
2018/03/19 08:18
2018/03/19 08:24
退会済みユーザー
2018/03/19 08:57 編集