Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.javascript > #4764
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: jQuery Wechsel von live() nach click() |
| Date | 2016-08-21 13:04 +0200 |
| Organization | PointedEars Software (PES) |
| Message-ID | <2726748.gXyuZs7Mdh@PointedEars.de> (permalink) |
| References | <e1re7iFb2buU1@mid.individual.net> <npa41p$o8r$2@solani.org> <4025524.fQgX0d2UCM@PointedEars.de> <e1te7hFp97oU1@mid.individual.net> |
Robert Berghaus wrote:
[lesbar formatiert]
> Am 21.08.2016 um 02:32 schrieb Thomas 'PointedEars' Lahn:
>> Das Problem ist aber anscheinend, dass Elemente mit der Klasse “Jahr”
>> dynamisch hinzugefügt werden und dann auf diesen noch kein Event-Listener
>> registriert ist.
>
> So ist es. Ich werde also nach dem Einfügen des Inhaltes den
> Event-Listener registrieren. Das Durchgehen vom DOM kann ich ja an
> jQuery delegieren. Das dürfte dann so aussehen:
>
> $( ".Jahr" ).on( "click", function( e ) {
> stopDefault( e );
> JahrAusblenden( e );
> } );
Das funktioniert dann, und nur dann, wenn ".Jahr" Dein Einfügekontext ist,
was ja nach Deiner eigenen Aussage nicht der Fall ist.
Christoph hat die richtige Lösung angedeutet: Registrier den Event-Listener
einmalig auf der Ebene Deines Einfügekontextes oder (*nur falls es nicht
anders geht*) auf Dokumentebene. Denn *click*-Events bubblen – es ist also
egal, ob die Elemente, welche den Event auslösen, erst später hinzugefügt
werden. Du musst dann nur ausschliessen, dass die Aktionen auch für andere
Elemente unterhalb der Registrierungsebene ausgeführt werden. Wie das mit
jQuery geht, wird dem geneigten Leser zur Übung überlassen (denn das ist
hier kein jQuery-Forum).
<https://www.w3.org/TR/dom/#events>
>> Die richtige Methode ist ausserdem nicht stopDefault(), sondern
>> e.preventDefault() [siehe ebenfalls die API-Dokumentation; es handelt
>> sich bei “e” um die Referenz auf ein *jQuery*-Event-Objekt, daher hat e
>> auch die preventDefault-Methode, wenn die DOM-Implementierung sie für
>> Event-Objekte nicht bereitstellt – der übliche Ansatz für Event-Listener-
>> Wrapper]). [Ausser das benutzerdefinierte stopDefault() macht mehr als
>> das jQuery-e.preventDefault().]
>
> Die Funktion macht mehr:
*Bist* *Du* *da* *auch* *wirklich* *ganz* *sicher*?
> function stopDefault( evt ) {
> if ( evt && evt.preventDefault ) {
> evt.preventDefault();
> } else if ( window.event && window.event.returnValue ) {
> window.event.returnValue = false;
> }
> } // function stopDefault( evt ) {
>
> Das hatte ich entweder in einem jQuery Buch
Wohl kaum.
> oder in der dicken JavaScript 'Bibel' gefunden.
Autsch. Schmeiss sie bitte weg, die „Bibel“ – wahrscheinlich eine uralte
Ausgabe von Danny Goodmans Machwerk.
> Da es mir universeller erschien, habe ich es übernommen.
Und was, denkst Du, machte *damals* das e.preventDefault() *von jQuery*?
<https://github.com/jquery/jquery/blob/1.12-stable/src/event.js#L825-L842>
Wenn Du die aktuelle jQuery-Version benutzt, brauchst Du obigen Workaround
nicht mehr, denn alle DOM-Implementierungen, die von der jeweiligen neuen
jQuery-Version unterstützt werden, haben ein natives e.preventDefault(), was
von jQuery nur noch getriggert wird:
<https://github.com/jquery/jquery/blob/2.2-stable/src/event.js#L598-L606>
[Womit klar sein sollte, dass man mit einer neuen jQuery-Version immer auch
Abwärtskompatibilität aufgibt. Bei anderen Bibliotheken ist das nicht
notwendigerweise der Fall.]
Bitte kein Kammquoting. Thunderbird/Icedove hat sogar eine Funktion, um
Zitate gezielt neu umbrechen zu lassen (Edit → Rewrap).
--
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.b
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-20 18:18 +0200
Re: jQuery Wechsel von live() nach click() "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-08-20 19:29 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-21 02:32 +0200
Re: jQuery Wechsel von live() nach click() "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-08-21 11:59 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-21 13:06 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <robert.berghaus@gmx.de> - 2016-08-21 12:31 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-21 13:04 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <robert.berghaus@gmx.de> - 2016-08-21 13:28 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-21 13:34 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-22 12:28 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-22 19:15 +0200
OT: Thunderbird Rewrap (was: jQuery Wechsel von live() nach click()) "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-08-21 15:05 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-22 12:17 +0200
Re: jQuery Wechsel von live() nach click() "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-08-22 15:27 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-22 16:27 +0200
Re: jQuery Wechsel von live() nach click() "Christoph M. Becker" <cmbecker69@arcor.de> - 2016-08-22 17:44 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-25 12:44 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-25 23:45 +0200
Re: jQuery Wechsel von live() nach click() Robert Berghaus <Robert.Berghaus@gmx.de> - 2016-08-26 11:25 +0200
Re: jQuery Wechsel von live() nach click() Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-08-26 21:19 +0200
csiph-web