Path: csiph.com!weretis.net!feeder4.news.weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: de.comp.lang.javascript Subject: Re: jQuery Wechsel von live() nach click() Date: Sun, 21 Aug 2016 02:32:41 +0200 Organization: PointedEars Software (PES) Lines: 54 Message-ID: <4025524.fQgX0d2UCM@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1471739591 7349 eJwNwgERwDAIA0BLA5Iw5Iy2+JfQ3T9DppUQBc5PWk2z7B55thoIx8vsXTUbdR6vQsQh0r8LDcUQVQ== (21 Aug 2016 00:33:11 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Sun, 21 Aug 2016 00:33:11 +0000 (UTC) User-Agent: KNode/4.14.2 X-NNTP-Posting-Host: eJwFwQkBwDAIA0BLPCF0ckYB/xJ6F07lTTCI2FhY/3pmfDEX5nV2oqVLbJNI6Fe2whR3RtYDJL8Qzg== X-User-ID: eJwFwQcBADAIAzBLvHLswMC/hCVQZ58whxsOF5WJSjqOtIJoulC10XZLdpXvKgVvvgYNUzyRwl3MxVP5FsQUaA== Cancel-Lock: sha1:5pnFmgTydFmZbOFBBhscePxwRbs= Xref: csiph.com de.comp.lang.javascript:4761 Christoph M. Becker wrote: > Am 20.08.2016 um 18:18 schrieb Robert Berghaus: >> Ich benutzte bisher JQuery 1.4.2 und initialisierte folgendermaßen: >> $( function() { >> $( ".Jahr" ).live( "click", function( e ) { >> stopDefault( e ); >> JahrAusblenden( e ); >> } ); >> } ); >> >> Mit 2.2.4 funktionierte das nicht mehr (.live nicht bekannt), weshalb >> ich das so machte: >> $( function() { >> $( ".Jahr" ).click( function( e ) { >> stopDefault( e ); >> JahrAusblenden( e ); >> } ); >> } ); >> >> Da ich den Inhalt der Seite aber mit AJAX lade, funktioniert das so >> nicht; mit .live ging es auch mit AJAX. >> >> Ich muß also wohl nach dem Laden der Seite den gesamten Baum durchgehen, >> und die Funktion binden, oder geht das einfacher? >> Damit kann ich aber auch die Initialisierung weglassen, oder ist das >> falsch? >> >> Gibt es vielleicht einen einfacheren Weg, live nach click? > > Funktioniert evtl. $.on()? Ja, aber es löst das Problem nicht. .on("click", …) ist äquivalent zu .click(…) und sollte Letzterem vorgezogen werden, da es zu einem einheitlichen Codestil beiträgt, der es ermöglicht, Event-Listener besser zu finden. 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. 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 es 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().] -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not cc me. / Bitte keine Kopien per E-Mail.