Delegado para capturar dos envíos de formulario

Usar la siguiente función para capturar dos envíos de formularios generados dinámicamente, pero no impide su envío.

$('body').delegate('.edit_faq, .new_faq', 'submit', function(e){
      e.preventDefault();
      //voodoo
    });

Estaba usando lo siguiente, usando live. Esto funciona, pero en vivo se deprecia y el resultado final es que este código termina en un complemento flexible.

$('.edit_faq').add('.new_faq').live('submit', function(e){
  e.preventDefault();
  //magic
});

preguntado el 05 de septiembre de 12 a las 10:09

Esto debería funcionar. ¿Qué versión de jquery estás usando y qué navegador? Una muestra en jsfiddle facilitaría la respuesta, y también hacer un caso de prueba puede descubrir errores. -

3 Respuestas

Lo que has escrito está funcionando.

comprobar:

http://jsfiddle.net/peuqU/

presione ejecutar como jsfiddle a veces necesita una actualización antes de enviar las pruebas.

Solo he podido probarlo con chrome 23.

Respondido el 05 de Septiembre de 12 a las 11:09

Trata on cuál es la forma recomendada, y devolver falso:

$('body').on('submit', '.edit_faq, .new_faq', function(e){
      e.preventDefault();
     //Do your stuff here.

    });

En cuanto a por qué todavía se produce el envío, ¿tal vez tenga un error JS en algún lugar de la página?

Respondido el 05 de Septiembre de 12 a las 11:09

¿Por qué devolver false y preventDefault? - Pelusa leve

Eso no funciona. Además, ese enlace aclara que en este caso return false no es necesario, como sospechaba. - Pelusa leve

FIJADO--

El problema era que el código requería estar envuelto en un documento onReady:

$(document).ready(function(){
  $('body').on('submit', '.edit_faq, .new_faq', function(e){
      e.preventDefault();
      //voodoo
  });
})

Se me ocurre que dado que en vivo no requería el ready, ¿quizás esto sigue estando mal?

Respondido el 05 de Septiembre de 12 a las 11:09

esta es la solución también live requiere document.ready también si no recuerdo mal. - vinczemarton

En el primero, está adjuntando los controladores de eventos a body que probablemente no exista hasta después de que se cargue el contenido DOM. En el segundo, los manipuladores se unen a la document sí mismo. - Dennis

Entonces, ¿puedo evitar la necesidad de onready adjuntando a $(documento)? - Pelusa leve

No creo que deba omitirlo ya que no habrá garantía de que funcione de manera consistente en todos los navegadores. - vinczemarton

@SoonDead Así es como live funciona, por lo que funcionará en todos los navegadores. - Dennis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.