Próbowałem znaleźć "właściwy" sposób, aby zapobiec podwójnemu złożeniu formularzy. Istnieje wiele powiązanych wpisów na SO, ale żadna z nich nie trafiła we mnie. Dwa pytania poniżej.Najprostszy sposób wyłączenia przycisku przy wysyłaniu formularza?
Oto moja forma
<form method="POST">
<input type="text" name="q"/>
<button class="once-only">Send</button>
</form>
Oto moja pierwsza próba wyłączenia podwójne przedkłada:
$(document).ready(function(){
$(".once-only").click(function(){
this.disabled = true;
return true;
});
});
Jest to podejście sugerowane tutaj: Disable button after post using JS/Jquery. Ten post sugeruje, że element przedkładający musi być wprowadzeniem, a nie przyciskiem, ale testowanie obu nie ma znaczenia. Możesz spróbować samemu używając tego skrzypka: http://jsfiddle.net/uT3hP/
Jak widać, wyłącza to przycisk, ale uniemożliwia również przesłanie formularza. W przypadkach, w których elementem przesyłającym jest przycisk i element wejściowy.
Pytanie 1: dlaczego ta funkcja obsługi kliknięć przerywa przesyłanie formularza?
wyszukiwanie wokół kilka znajdę tego rozwiązania (od Why doesn't my form post when I disable the submit button to prevent double clicking?)
if($.data(this, 'clicked')){
return false;
} else{
$.data(this, 'clicked', true);
return true;
}
Można grać za pomocą tego skrzypce: http://jsfiddle.net/uT3hP/1/
To działa, ale ...
Pytanie 2: Czy to jest najlepsze, co możemy zrobić?
Myślałem, że to będzie elementarne. Podejście 1 nie działa, podejście 2 ma, ale nie podoba mi się to i sens musi być prostszy.
możliwe duplikat [Wyłącz złożyć na formularzu przycisk submit] (http://stackoverflow.com/questions/5691054/disable-submit-button-on-form-submit) – mcastle