フォームの二重送信を防ぐ「正しい」方法を見つけようとしています。SOには関連する投稿がたくさんありますが、どれも私には当てはまりません。以下2問。
これが私のフォームです
<form method="POST">
<input type="text" name="q"/>
<button class="once-only">Send</button>
</form>
二重送信を無効にする最初の試みは次のとおりです。
$(document).ready(function(){
$(".once-only").click(function(){
this.disabled = true;
return true;
});
});
これは、ここで提案されているアプローチです: Disable button after post using JS/Jquery。その投稿は、送信要素がボタンではなく入力でなければならないことを示唆していますが、両方をテストしても違いはありません。このフィドルを使用して自分で試すことができます: http://jsfiddle.net/uT3hP/
ご覧のとおり、これによりボタンが無効になりますが、フォームの送信も妨げられます。サブミット要素がボタンと入力要素の場合。
質問 1:このクリック ハンドラーがフォームの送信を停止するのはなぜですか?
さらに検索すると、この解決策が見つかります(ダブルクリックを防ぐために送信ボタンを無効にすると、フォームが投稿されないのはなぜですか? から)
if($.data(this, 'clicked')){
return false;
} else{
$.data(this, 'clicked', true);
return true;
}
このフィドルを使用してこれで遊ぶことができます: http://jsfiddle.net/uT3hP/1/
これは機能しますが...
質問 2: これが私たちにできる最善のことですか?
これは初歩的なことだと思いました。アプローチ1は機能しませんが、アプローチ2は機能しますが、私はそれが好きではなく、もっと簡単な方法が必要だと感じています.