jQuery on vs bind für ungültigen Ereignistyp

Lesezeit: 2 Minuten

Benutzeravatar von drummondj
drummondj

Angesichts des folgenden HTML:

<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 Javascript-Code nicht:

(function( jQuery ) {

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

})( jQuery );

Hat jemand eine Ahnung warum?

BEARBEITEN: Geige aktualisiert, um eine zu korrigieren: http://jsfiddle.net/PEpRM/1

  • Wahrscheinlich, weil das HTML-Eingabeelement ungültig sein kann, das Formularelement jedoch nicht, und das ungültige Ereignis nicht angezeigt wird

    – adeneo

    5. Februar 2014 um 22:02 Uhr


Das ungültige Ereignis sprudelt nicht, so steht es in der Dokumentationsodass delegierte Event-Handler nicht funktionieren, da das Event nicht aufbläht.

Das sollte funktionieren

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

  • @TravisJ – Die Frage war, warum es mit dem zweiten Beispiel nicht funktioniert, und die Antwort ist, dass Sie ein Ereignis, das nicht sprudelt, nicht delegieren können, oder so dachte ich? Was ist dann das Problem?

    – adeneo

    5. Februar 2014 um 22:05 Uhr


  • Aber ich gebe der .on-Methode den “Input”-Selektor. Der Punkt ist, dass, wenn die Formularinhalte dynamisch neu geladen werden, sie ihre Event-Handler mit der .bind-Methode verlieren.

    – drummondj

    5. Februar 2014 um 22:06 Uhr

  • @drummondj – Nun, das kannst du nicht. Das Ereignis sprudelt einfach nicht, also können Sie das Ereignis nicht delegieren, Sie müssen den Ereignishandler anwenden, nachdem das Element in das DOM eingefügt wurde, oder eine Art Problemumgehung finden, und mir fällt nicht wirklich ein cleverer Weg ein damit das funktioniert.

    – adeneo

    5. Februar 2014 um 22:08 Uhr

  • @dru, das ist genau das Problem, wenn Sie den Selektor mit on angeben, erstellen Sie ein Delegate-Ereignis auf einer höheren Ebene, das ausgelöst wird, wenn und nur wenn das Ereignis sprudelt.

    – gdoron unterstützt Monica

    5. Februar 2014 um 22:10 Uhr

  • @drummondj – Ich glaube, das wäre der beste Ansatz, da alles andere wahrscheinlich Hacks mit Intervallen oder Mutationsbeobachtern beinhalten würde, da es keine Möglichkeit gibt, die Ereignisblase zu machen (nun, es gibt sie, aber das ist noch komplizierter).

    – adeneo

    5. Februar 2014 um 22:12 Uhr

1404710cookie-checkjQuery on vs bind für ungültigen Ereignistyp

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy