2012-02-12 3 views
6

Ho una forma di layout + in questo modo:Perché l'evento di invio di un modulo non viene attivato (jQuery)?

<form ...> 
    <div id="editor"> 
     [form html] 
     <input type="submit" value="Submit form" /> 
    </div> 
</form> 

E il seguente javascript:

$(function() { 
    var form = $('#editor').parents('form'); 
    alert(form.length); // this alerts "1" 
    $(document).on('submit', 'form', function() { 
     alert('document form submit fired'); // this works as expected (alerts) 
    }); 
    form.on('submit', function() { 
     alert('selected form submit fired'); // this is never alerted 
    }); 
}); 

Questo modulo non viene caricato tramite la tecnologia AJAX. Quando la pagina viene caricata, la prima finestra di dialogo avvisa "1". Tuttavia, quando si invia il modulo, viene generato un solo avviso, quello che attiva l'invio per tutti i moduli nel documento.

Perché ciò accadrebbe?

+0

Funziona per me in jsFiddle http://jsfiddle.net/sERhZ/ Forse qualcosa non funziona con il tuo html o anche l'installazione? –

+0

Infatti, dati i gestori, quello applicato direttamente alla forma dovrebbe (e lo fa) sparare prima. È questo il tuo codice completo? Ci sono errori nella console del browser? – tvanfosson

+0

Scommetto che hai 'return false' sul primo handler che impedisce al secondo di sparare. Ho ragione? – gdoron

risposta

7

It does work. Sta succedendo qualcos'altro che impedisce al secondo allarme di sparare.

+0

Hai ragione. C'era un altro codice che interferiva. Mi stavo chiedendo cosa potesse essere. Si è verificato un errore durante l'override di $ .validator.settings.highlight e $ .validator.settings.unhighlight. – danludwig

0

Il selettore di modulo è errato.

cercare di fare questo

$("form").on('submit', function() { 

abbastanza sicuro che questo dovrebbe funzionare

In realtà se non viene caricata tramite ajax o dinamicamente tramite JavaScript

Si può solo fare

$("form").submit(function() { 

EDIT

Scratch my above. Non ti ho visto impostare il valore del modulo. Controlla http://jsfiddle.net/s3fvM/1/. Sembra che stia funzionando bene per me. entrambi stanno sparando e allertando.

+1

'form' è una variabile che contiene l'elemento form jQuery-wrapped. – tvanfosson

+0

Sì, lo vedo ora. Ho appena fatto questo in jsfiddle ed entrambi sono stati licenziati. [http://jsfiddle.net/s3fvM/](http://jsfiddle.net/s3fvM/1/) – Henesnarfel

+0

"scrutato il tuo sopra" sei d'accordo con quella modifica? – gdoron