2012-11-28 17 views
24

So che ci sono molte domande a riguardo, ma ho provato diverse soluzioni e nulla funziona.Pulsante Disabilita dopo invio con jQuery

Nel mio Django app Ho una forma:

<form method='post'> 
    <button type='submit'>Send</button> 
</form> 

ho wan't per disabilitare il pulsante una volta che l'utente ha inviato il modulo. L'utilizzo di altre domande, ho provato diverse cose, come:

<button type='submit' onclick="this.disabled=true">Send</button> 

Quando scatto, il pulsante è disattivato ... ma la forma non viene presentata. E per ogni tentativo ho avuto lo stesso problema: o il pulsante è disabilitato o il modulo viene inviato. Non riesco a trovare come fare entrambi ...

Sto usando Chrome. Qualche idea sul perché ho questo problema? Grazie per l'aiuto.

+0

Potrebbe impostare il ''

risposta

65

Prova questo:

$('form').submit(function() { 
    $(this).find("button[type='submit']").prop('disabled',true); 
}); 
+1

perfetto! Funziona. Accetto la risposta il prima possibile –

+12

Ciò mantiene i valori dei pulsanti di invio inviati. Di solito non è un problema, ma può essere. – Jake

0

prova, in questo modo,

<input type="submit" value="Send" onclick="javascript=this.disabled = true; form.submit();"> 
+0

Non inviare ancora ... –

+0

@JulietteDupuis aggiornato, –

5

Si potrebbe disabilitare su di submit evento del form genitore:

$("form").on("submit", function() { 
    $(this).find(":submit").prop("disabled", true); 
}); 

Assicurarsi di eseguire questo codice solo dopo che è stato caricato il numero HTMLFormElement, altrimenti non vi sarà associato. Per garantire che il legame si svolge, fuoco questa via all'interno di un blocco document-ready:

// When the document is ready, call setup 
$(document).ready(setup); 

function setup() { 
    $("form").on("submit", function() { 
     $(this).find(":submit").prop("disabled", true); 
    }); 
} 
1

Qualcosa di simile potrebbe funzionare.

<button id="btnSubmit" type='submit'> Send </button> 

<script> 
    $("#btnSubmit").on("click", function(e){ 
      e.PreventDefault(); 
      $(this).closest("form")[0].submit(); 
      $(this).prop('disabled',true) 
    }); 
</script> 
1

Che ne dici di questo?

onclick="this.style.visibility='hidden';" 

Direi, invece di disattivarlo, nasconderlo.

Se si vuole andare con disabled

onclick="this.style.disabled='true';" 
+0

Per me ho provato questo e ha funzionato bene, ma nasconde solo il pulsante di conferma, dove come ho confermare e annullare il pulsante sulla mia pagina e voglio che entrambi i pulsanti siano nascosti onClick non ha funzionato per me però. – raja777m

1

mia variante, pulsante, nessun disabile diretta ma solo vidible nascosto disabilitare:

<input type="submit" name="namebutton" value="Nahrát obrázek" onclick="this.style.visibility='hidden';" ondblclick="this.style.visibility='hidden';"/> 
+0

Per me ho provato questo e ha funzionato bene, ma nasconde solo il pulsante di conferma, dove come ho confermare e annullare il pulsante sulla mia pagina e voglio entrambi i pulsanti per essere nascosti – raja777m

0

mi piace questo meglio:

<script> 
    var submit = false; 
    $('form').submit(function() { 
     if (submit) { return false; } 
     else { submit = true;} 
    }); 
</script> 

in questo modo impedisce anche il tasto invio di inviare più di una volta

+0

No, non è l'invio – raja777m

0

Sto utilizzando Chrome. Qualche idea sul perché ho questo problema?

Bene, la prima volta mi sono occupato di questo, ho risolto in questo modo:

function blockButtons() { 
    $('button:submit').click(function(){ 
    $('button:submit').attr("disabled", true); 
    }); 
} 

questo ha funzionato perfettamente, ma ... in Mozilla Firefox.Google Chrome non ha presentato, così ho cambiato in questo:

function blockButtons() { 
    $('button:submit').click(function(){ 
     var form = $(this).parents('form:first'); 
    $('button:submit').attr("disabled", true); 
    $('button:submit').css('opacity', 0.5); 
    form.submit(); 
    }); 
} 

questo ha lavorato sia in Mozilla Firefox, tuttavia, dopo che alcuni dei nostri utenti che utilizzano le vecchie versioni di IE sperimentato difficoltà di avere due sottomette. Cioè, quello avviato dal javascript, e quello dal browser che ignora il fatto di onclick e che semplicemente lo inoltra comunque. Questo può essere risolto da e.preventDefault, credo.

8

Mi piace, non devo attraversare DOM. funzione Indossare una funzione setTimeout, questo permette far presentare e dopo pulsante Disabilita, anche se setTimeout è 0

$(document).ready(function() { 
$("#btnSubmit").click(function() { 
    setTimeout(function() { disableButton(); }, 0); 
}); 

function disableButton() { 
    $("#btnSubmit").prop('disabled', true); 
} 
}); 
0

Se non si desidera che un elemento sia doppio clic, utilizzare .one()

<button id="submit" type="submit">Send</button> 
<script> 
$(function() { 
$("#submit").one("click", function() { 
//enter your submit code 
}); 
}); 

.one()

0

Got un problema su Chrome, non era inviare il modulo. Ho provato un po 'di codice diverso, questo è stato ciò che ha funzionato meglio per me (e si vede meglio IMO):

$('#form_id').submit(function() { 
    $("input[type='submit']", this) 
     .val("Please Wait...") 
     .attr('disabled', 'disabled'); 
    return true; 
    }); 

Sostituire form_id con l'id del modulo. Classi lavoro troppo, naturalmente: $('.form_class')

Fonte: JavaScript Coder

0

Si può fare qualcosa di simile. Funziona bene con me.

<form method='post' onSubmit='disableFunction()'> 
// your code here 
</form> 

Poi nello script, aggiungere questo

<script> 
function disableFunction() { 
    $('#btn_submit').prop('disabled', true); 
} 
</script> 
Problemi correlati