Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4763

Re: jQuery Wechsel von live() nach click()

Path csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Robert Berghaus <robert.berghaus@gmx.de>
Newsgroups de.comp.lang.javascript
Subject Re: jQuery Wechsel von live() nach click()
Date Sun, 21 Aug 2016 12:31:12 +0200
Lines 86
Message-ID <e1te7hFp97oU1@mid.individual.net> (permalink)
References <e1re7iFb2buU1@mid.individual.net> <npa41p$o8r$2@solani.org> <4025524.fQgX0d2UCM@PointedEars.de>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace individual.net hmMIsz5LVogWrTEJZYgiiQKKbS53GqQhXFw0KN1qM89Myom/Rt
Cancel-Lock sha1:nAa2Z9msfPrquOYt5uQGUWppWsY=
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.1.0
In-Reply-To <4025524.fQgX0d2UCM@PointedEars.de>
Xref csiph.com de.comp.lang.javascript:4763

Show key headers only | View raw


Am 21.08.2016 um 02:32 schrieb Thomas 'PointedEars' Lahn:
> 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 Argument zu einheitlichem Codestil leuchtet mir ein.

> 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 );
} );


> 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().]
>

Die Funktion macht mehr:
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 oder in der dicken
JavaScript 'Bibel' gefunden. Da es mir universeller erschien, habe ich
es übernommen.

Vielen Dank für die Gedanken und schönen Sonntag

Robert

Back to de.comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

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