Я пытался найти "правильный" способ предотвратить двойную подачу форм. Есть много похожих постов на SO, но ни один из них не попал в точку для меня. Два вопроса ниже.
Вот моя форма
<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;
});
});
Этот подход предлагается здесь: Отключить кнопку после публикации, используя 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 работает, но мне это не нравится, и я чувствую, что должен быть более простой способ.