2014-02-05 10 views
11

folgende HTML Gegeben:jQuery auf vs bind für ungültig Ereignistyp

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

das folgende JavaScript funktioniert gut:

(function(jQuery) { 

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

})(jQuery); 

Aber dieser Code Javascript nicht:

(function(jQuery) { 

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

})(jQuery); 

Irgendjemand hat eine Idee warum?

EDIT: Aktualisiert Geige ein korrigieren: http://jsfiddle.net/PEpRM/1

+2

Wahrscheinlich, weil das HTML-Eingabeelement ungültig, aber das Formularelement kann nicht, und das ungültige Ereignis nicht Blase – adeneo

Antwort

13

Das unwirksame Ereignis nicht Blase, sagt es so in den documentation, so delegierte Event-Handler wird nicht als Ereignis Arbeit nicht sprudeln.

Diese

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

@TravisJ sein kann funktionieren soll - die Frage war, warum es doesn t arbeiten mit dem zweiten Beispiel, und die Antwort ist, dass Sie nicht ein Ereignis delegieren können, das nicht sprudelt, oder so dachte ich? Was ist das Problem? – adeneo

+0

Aber ich gebe den "Eingabe" -Wähler auf die .on-Methode. Der Punkt ist, dass, wenn der Inhalt des Formulars dynamisch neu geladen wird, sie ihre Event-Handler mit der .bind-Methode verlieren. – drummondj

+1

@drummondj - Nun, du kannst nicht. Das Ereignis bläst einfach nicht, so dass Sie das Ereignis nicht delegieren können, Sie müssen den Ereignishandler anwenden, nachdem das Element in das DOM eingefügt wurde, oder eine Art Workaround finden, und ich kann mir keine kluge Weise vorstellen um das zu schaffen. – adeneo