2012-02-21 16 views
5

Ecco il mio codice:La disattivazione di un pulsante di invio dopo uno scatto

<form name='frm' id='frm' action='load.asp' method='post' onSubmit='return OnSubmit(this)' style='margin-top:15px'> 
    <input type='submit' name='send' id='send' onclick="this.disabled=true;return true;" value='Send' title='test'> 
</form> 

Voglio che la mia funzione onsubmit da eseguire e voglio la pagina da submited. Nel mio sito web, senza presentare alcuna funzione e

Ho cercato di duplicare qui, ma la forma sembra essere distaccato e la mia funzione non viene mai eseguita ... http://jsfiddle.net/V7B3T/1/

e io no sapere quando dovrei riattivare il pulsante.

Devo farlo nel document.ready o nella funzione onSubmit?

Quindi se qualcuno può aggiustare il violino :) e dopo lo confronterò con il mio codice. penso: S Mi sono perso

Grazie a tutti

risposta

14

Se si desidera convalidare il modulo o apportare modifiche alla prima di presentare e solo presentare se il modulo è valido si può fare qualcosa di simile:

<form id="frm" action="load.asp" method="post" enctype="multipart/form-data"> 
    <input type="submit" name="send" id="send" value="Send" title="test"> 
</form> 

e il codice JavaScript:

$('#frm').bind('submit', function (e) { 
    var button = $('#send'); 

    // Disable the submit button while evaluating if the form should be submitted 
    button.prop('disabled', true); 

    var valid = true;  

    // Do stuff (validations, etc) here and set 
    // "valid" to false if the validation fails 

    if (!valid) { 
     // Prevent form from submitting if validation failed 
     e.preventDefault(); 

     // Reactivate the button if the form was not submitted 
     button.prop('disabled', false); 
    } 
}); 

Ecco un lavoro fiddle.

+0

Esattamente quello di cui avevo bisogno, lavorando molto bene grazie – GregM

0

Se non si desidera inviare la pagina di questo dovrebbe fare il trucco:

onclick="this.disabled=true;return false;" 
+0

Spiacente, la mia domanda è incasinata, voglio inviare la pagina e voglio che la funzione onsubmit sia eseguita – GregM

4

mi sarebbe sicuramente spostare quel codice per esterni JS (e CSS) file a cui appartiene, ma questo dovrebbe funzionare:

onclick="this.disabled=true;this.parentNode.submit();" 

Dal momento che si sta disabilitando il tasto presentare onclick verrà disattivata una volta che la forma concreta submissi al clic avviene (onclick succede prima). Presentare il modulo con JS dovrebbe comunque fare il trucco.

http://jsfiddle.net/V7B3T/4/

Edit: Per quanto riguarda la riattivazione il pulsante, che avrebbe dovuto accadere dopo la funzione OnSubmit() ha eseguito immagino.

+0

grazie, Ive l'ha provato, ma con questo la mia funzione onSubmit non viene eseguita – GregM

+0

Ok, quindi esegui semplicemente la funzione 'OnSubmit()' invece di inviare il modulo: 'onclick =" this.disabled = true; OnSubmit (this.parentNode); '. – powerbuoy

+0

Soluzione più semplice e breve finora. Grazie! –

5

Se il tuo modulo esegue effettivamente un postback, stai effettivamente modificando la pagina, e quindi non dovrai preoccuparti di riattivare il tuo pulsante (ciò avverrà una volta caricata la pagina).

Inoltre, dal momento che si sta utilizzando jQuery, si può anche utilizzare in modo corretto e separare il markup HTML e Javascript allegando i gestori di eventi che utilizzano le funzioni di jQuery, e non onclick, onsubmit, ecc attributi su elementi HTML.

Aggiornato HTML:

<form name='frm' id='frm' action='http://jsfiddle.net/' enctype='multipart/form-data' method='post' style='margin-top:15px'> 
    <input type='submit' name='send' id='send' value='Send' title='test'> 
</form> 

Aggiornato Javascript:

function submitForm(form) { 
    alert("submitted"); 
} 

$('#send').click(function(e) { 
    this.disabled = true; 
}); 

$('#frm').submit(function(e) { 
    submitForm(this);  
}); 

Working jsFiddle

dovrete avvolgere che in una chiamata $(document).ready(function() {...}); per l'utilizzo su una pagina reale - ho lasciato perché jsFiddle esegue comunque Javascript onLoad fornito.

+0

Non funziona all'ultimo Chrome Sembra che il pulsante di disabilitazione prevenga l'invio dei moduli – jmarceli

+0

@jmarceli Sì, sembra che abbiano cambiato qualcosa. Mi chiedo se sia intenzionale ... –

Problemi correlati