Ho cercato di trovare il modo "giusto" per evitare il doppio invio di moduli. Ci sono molti post correlati su SO ma nessuno di loro ha colpito il posto per me. Due domande qui sottoIl modo più semplice per disabilitare il pulsante all'invio di un modulo?
Qui è la mia forma
<form method="POST">
<input type="text" name="q"/>
<button class="once-only">Send</button>
</form>
Ecco il mio primo tentativo di disabilitare doppie sottomette:
$(document).ready(function(){
$(".once-only").click(function(){
this.disabled = true;
return true;
});
});
Questo è l'approccio suggerito qui: Disable button after post using JS/Jquery. Questo post suggerisce che l'elemento di presentazione deve essere un input piuttosto che un pulsante, ma il test di entrambi non fa differenza. Puoi provarlo tu stesso usando questo violino: http://jsfiddle.net/uT3hP/
Come puoi vedere, questo disabilita il pulsante, ma impedisce anche l'invio del modulo. Nei casi in cui l'elemento di invio è un pulsante e un elemento di input.
Domanda 1: perché questo gestore di clic interrompe l'invio del modulo?
cercare in giro un po 'più trovo questa soluzione (da 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;
}
Si può giocare con questo utilizzo di questo violino: http://jsfiddle.net/uT3hP/1/
Questo funziona, ma ...
Domanda 2: E 'questo il meglio che possiamo fare?
Ho pensato che sarebbe stata una cosa elementare. L'approccio 1 non funziona, l'approccio 2 sì, ma non mi piace e sento che ci deve essere un modo più semplice.
possibile duplicato del [Disabilita pulsante di invio sulla forma presentare] (http://stackoverflow.com/questions/5691054/disable-submit-button-on-form-submit) – mcastle