jQuery on () statt live () funktioniert nicht

8

Ich habe das folgende HTML-Tag

%Vor%

Wenn ich das tue funktioniert es

%Vor%

Aber wenn ich versuche, dasselbe mit on() anstelle von live() wie im folgenden Code zu tun, funktioniert es nicht. Was mache ich falsch?

%Vor%

Dabei ist #someDynamicElement ein Element, das dynamisch zur Seite hinzugefügt wird.

    
Pinkie 16.02.2012, 23:26
quelle

4 Antworten

4

Sie können den Code aufrufen, wenn das Element mit wrapper ID nicht erreichbar ist (z. B. warten Sie nicht, bis das DOM bereit ist).

Versuchen Sie, das so zu lösen:

%Vor%

Es wird change -Ereignishandler an das #wrapper -Element angehängt, wenn das DOM bereit ist.

Andere Möglichkeiten (von denen einige bereits erwähnt wurden):

  • #txtColor ist nicht in #wrapper ,
  • #wrapper wird dynamisch hinzugefügt,
  • IDs können dupliziert werden (sowohl wrapper als auch txtColor IDs müssen eindeutig sein, dh sie können nur einem Element zugeordnet werden),
Tadeck 16.02.2012, 23:33
quelle
18

Der Grund, warum es nicht funktioniert, ist, dass wenn Sie von live() zu on() wechseln, Sie das Element ändern müssen, in dem Sie den Listener auf das Dokumentelement gesetzt haben. Versuchen Sie Folgendes:

%Vor%     
Horatio Alderaan 16.02.2012 23:31
quelle
1

Ich vermute, dass sowohl #txtColor als auch #wrapper dynamisch an die Webseite angehängt werden. Sie werden später hinzugefügt, nachdem der jQuery-Code ausgeführt wurde. Zu dem Zeitpunkt, zu dem dieser jQuery-Code ausgeführt wird, gibt es (noch) kein #wrapper -Element auf der Seite ...

Habe ich richtig geraten?

    
Šime Vidas 16.02.2012 23:45
quelle
0

Es ist sehr schön zu sehen, wie Sie helfen möchten, aber manchmal "Ich denke" oder "andere Möglichkeiten" verwirren einfach alle, einschließlich mir. Sehr geschätzt Vegas jsfiddle link jedoch nicht so hilfreich, aber nehmen wir es von ihm und da :-), wenn Sie den ganzen Code von Pinkie in seinen jsfiddler Link setzen und nur diese Zeile aktualisieren

%Vor%

Sie werden sehen, dass es einwandfrei funktioniert (Ändern Sie den Inhalt der Textbox auf z. B. rot oder grün und klicken Sie außerhalb) mit der Option live () . Es funktioniert jedoch nicht mit on () . Um es zu beheben, haben wir zwei überraschend einfache Optionen:

1) verschieben Sie einfach die Eingabe in den Wrapper, keine Änderung in Pinkies on () benötigt, oder

%Vor%

2) behalte den HTML-Code unverändert und aktualisiere jquery als diesen (Ich habe den zweiten Parameter von on () entfernt und den Selektor #wrapper in #txtColor geändert) .

%Vor%

Problem behoben, £ 10.000 Scheck erhalten: -)

Und wenn Sie bis hier weiterlesen, werde ich auch raten :-) Das Problem, das Sie erfahren haben, ist nur eine Verwirrung darüber, wie on () funktioniert und seine Selektoren. Wir haben ein paar Optionen mit Selektoren in on (), wie Sie auch hier api.jquery.com/on/ sehen können

Und noch ein bisschen, bitte, lasst uns versuchen, zuerst zu kodieren, bevor wir die Antworten erraten :-) Es sei denn, du bist Guru, was ich nicht bin. Versuchen wir auch, den ursprünglichen Code so gut wie möglich unberührt zu lassen, damit der Frager nicht verwirrt wird, denn was für Sie sehr offensichtlich ist, könnte für weniger erfahrene Programmierer sehr verwirrend sein: -)

Guten Tag an euch alle, lass uns einen anderen Tag programmieren: -)

ps. Noch ein Tipp, wenn Sie jsfiddle noch nie benutzt haben und es schaffen, HTML und Javascript zu aktualisieren, müssen Sie im Hauptmenü auf Aktualisieren oder Ausführen klicken: -)

    
Vaclav Elias 09.01.2013 10:58
quelle

Tags und Links