2012-02-12 14 views
6

Tengo un formulario + diseño de este modo:¿Por qué el evento de envío de un formulario no se activa (jQuery)?

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

Y la siguiente 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 
    }); 
}); 

Este formulario no se carga a través de AJAX. Cuando se carga la página, el primer diálogo alerta "1". Sin embargo, al enviar el formulario, solo se activa una alerta, la que activa el envío para todos los formularios del documento.

¿Por qué sucedería esto?

+0

Funciona para mí en jsFiddle http://jsfiddle.net/sERhZ/ Tal vez algo está mal con su html o incluso configuración? –

+0

De hecho, dados los manejadores, el que se aplica directamente al formulario debe (y lo hace) disparar primero. ¿Es este tu código completo? ¿Hay algún error en la consola del navegador? – tvanfosson

+0

Apuesto a que tienes 'return false' en el primer controlador impidiendo que el segundo se dispare. ¿Estoy en lo cierto? – gdoron

Respuesta

7

It does work. Está sucediendo algo más que impide que la segunda alerta se active.

+0

Tienes razón. Había otro código interfiriendo. Me preguntaba qué podría ser. Resulta que tuve un error al anular $ .validator.settings.highlight y $ .validator.settings.unhighlight. – danludwig

0

Su selector de formulario es incorrecto.

tratar de hacer esto

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

Bastante seguro de que esto debería funcionar

En realidad, si no se carga a través de ajax o dinámicamente a través de JavaScript

Usted sólo puede hacer

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

EDITAR

Rayar mi arriba. No te vi establecer el valor de la forma. Consulte http://jsfiddle.net/s3fvM/1/. Parece estar funcionando bien para mí. ambos están disparando y alertando.

+1

'form' es una variable que contiene el elemento de formulario jQuery-wrapped. – tvanfosson

+0

Sí, ya lo veo. Acabo de hacer esto en jsfiddle y ambos están siendo despedidos. [http://jsfiddle.net/s3fvM/](http://jsfiddle.net/s3fvM/1/) – Henesnarfel

+0

"rayhed your above" ¿estás de acuerdo con esa edición? – gdoron

Cuestiones relacionadas