jQuery en vs bind para tipo de evento no válido

2 minutos de lectura

avatar de usuario
tambormonj

Dado el siguiente HTML:

<form>
  <input type="number" required>
</form>

El siguiente javascript funciona bien:

(function( jQuery ) {

    jQuery("input").bind("invalid", function(event) {
        console.log(event.type);
    });

})( jQuery );  

Pero este código javascript no:

(function( jQuery ) {

    jQuery("form").on("invalid", "input", function(event) {
        console.log(event.type);
    });

})( jQuery );

¿Alguien tiene idea de por qué?

EDITAR: violín actualizado para corregir uno: http://jsfiddle.net/PEpRM/1

  • Probablemente porque el elemento de entrada HTML puede no ser válido, pero el elemento de formulario no, y el evento no válido no burbujea.

    – adeneo

    5 de febrero de 2014 a las 22:02


El evento inválido no burbujea, lo dice en el documentaciónpor lo que los controladores de eventos delegados no funcionarán ya que el evento no aparecerá.

Esto debería funcionar

jQuery("form input").on("invalid", function(event) {
    console.log(event.type);
});

  • @TravisJ: la pregunta era por qué no funciona con el segundo ejemplo, y la respuesta es que no puede delegar un evento que no burbujee, ¿o eso pensé? ¿Cuál es el problema entonces?

    – adeneo

    5 de febrero de 2014 a las 22:05


  • Pero le doy el selector de “entrada” al método .on. El punto es que si los contenidos del formulario se recargan dinámicamente, perderán sus controladores de eventos usando el método .bind.

    – tambormonj

    5 de febrero de 2014 a las 22:06

  • @drummondj – Bueno, no puedes. El evento simplemente no burbujea, por lo que no puede delegar el evento, debe aplicar el controlador de eventos después de que el elemento se haya insertado en el DOM o encontrar algún tipo de solución, y realmente no puedo pensar en ninguna forma inteligente para que funcione.

    – adeneo

    5 de febrero de 2014 a las 22:08

  • @dru, ese es exactamente el problema, cuando especifica el selector con, crea un evento de delegado en un nivel superior que se activará si y solo si el evento burbujea.

    – gdoron está apoyando a Mónica

    5 de febrero de 2014 a las 22:10

  • @drummondj: creo que ese sería el mejor enfoque, ya que cualquier otra cosa probablemente implicaría hacks con intervalos u observadores de mutaciones, ya que no hay forma de hacer que el evento burbujee (bueno, la hay, pero eso es aún más complicado)

    – adeneo

    5 de febrero de 2014 a las 22:12

¿Ha sido útil esta solución?