Najprostszy sposób na wyłączenie przycisku po przesłaniu formularza?
Próbowałem znaleźć „właściwy” sposób na uniknięcie podwójnego składania formularzy. Istnieje wiele pokrewnych postów na temat SO, ale żaden z nich nie trafił w moje miejsce. Dwa pytania poniżej.
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ójnych zgłoszeń:
$(document).ready(function(){
$(".once-only").click(function(){
this.disabled = true;
return true;
});
});
Takie podejście zaproponowano tutaj:Wyłącz przycisk po wysłaniu za pomocą JS / Jquery. Ten post sugeruje, że element przesyłający musi być raczej wejściem niż przyciskiem, ale testowanie nie ma znaczenia. Możesz spróbować sam, używając tego skrzypce:http://jsfiddle.net/uT3hP/
Jak widać, wyłącza to przycisk, ale również uniemożliwia przesłanie formularza. W przypadkach, gdy elementem przekazującym jest przycisk i element wejściowy.
Pytanie 1: dlaczego ten program do obsługi kliknięć przestaje przesyłać formularz?
Szukając czegoś więcej znajduję to rozwiązanie (odDlaczego mój formularz nie publikuje się po wyłączeniu przycisku przesyłania, aby zapobiec podwójnemu kliknięciu?)
if($.data(this, 'clicked')){
return false;
} else{
$.data(this, 'clicked', true);
return true;
}
Możesz grać tym, używając tego skrzypce:http://jsfiddle.net/uT3hP/1/
To działa, ale ...
Pytanie 2: Czy to najlepsze, co możemy zrobić?
Myślałem, że to będzie elementarna sprawa. Podejście 1 nie działa, podejście 2 ma, ale nie podoba mi się to i sens musi być prostszy.