Gibt es irgendeinen Grund, jemals $ .live über $ .delegate zu verwenden?

8

Ich habe in einer anderen Frage gelesen, die Sie live verwenden würden, wenn es keinen Container gibt, an den das Ereignis mit $ .delegate angehängt werden könnte, von dem Sie wussten, dass es nicht weggehen würde, aber warum nicht einfach:

%Vor%

Ich bin ziemlich überzeugt davon, dass es keinen Grund gibt, $.live() in einem neuen Code zu verwenden, und dass es nur noch aus Gründen der Abwärtskompatibilität hier ist.

Natürlich liege ich oft falsch. Also frage ich: Wann würde ich $ .live statt $ .delegate verwenden und warum?

    
Will 16.09.2010, 18:17
quelle

4 Antworten

7

$.live()

... ist etwas prägnanter, wenn Sie kein bestimmtes Element für den Kontext verwenden müssen.

$.delegate()

... ist etwas praktischer, wenn Sie bereits einen Kontext ausgewählt haben, insbesondere wenn Sie verketten, um andere Operationen in diesem Kontext auszuführen.

... ist etwas effizienter, vorausgesetzt, Sie führen keine anderen Operationen an den Zielelementen durch, da der Zielselektor beim Binden nicht unnötig ausgewertet wird.

... ermöglicht es Ihnen, mehrere Kontexte zu targetieren, die live () nicht (siehe Implementierungshinweis unten).

Ansonsten ist es eine Frage der persönlichen Präferenz. Sie können die gleichen Dinge mit beiden Methoden erreichen - in der Tat die aktuelle (ab 1.4.2) Implementierung von delegate delay delegiert nur auf live !

%Vor%

Implementierungshinweis

Obwohl Sie effektiv die aktuelle Implementierung von live () als Ersatz für alle Formen von delegate () verwenden könnten, sollten Sie vermeiden aufrufen live () so, wie delegate () es aufruft Der nicht dokumentierte vierte Parameter ist nur für den internen Gebrauch bestimmt. Normalerweise würden Sie einen Kontext für live () bereitstellen, so wie Sie jedem jQuery-Selektor einen Kontext bereitstellen würden - indem Sie das Element als zweiten Parameter an $ () übergeben:

%Vor%

Wenn Sie einen Selektor für den Kontext verwenden müssen (wie in einem Szenario, in dem delegierte Ereignisse an mehrere separate Kontextelemente gebunden werden sollen), sollten Sie sich an delegate () halten:

%Vor%

Demonstration

%Vor%     
Shog9 16.09.2010, 18:39
quelle
6

Die Funktion .delegate () wurde in 1.4.2 hinzugefügt. Ich habe auch keinen Grund mehr, .live () zu verwenden. Es geht nur darum, alte Gewohnheiten zu brechen. Die Funktion .delegate () macht dasselbe auf eine andere und viel effizientere Weise.

Hier ist ein großartiger Artikel über .delegate (): Ссылка

    
Lance Fisher 16.09.2010 18:32
quelle
1

$('.foo').live('click', fooClicked) ist viel besser lesbar als $('#fooParent').delegate('#foo', 'click', fooClicked) und Sie können es außerhalb des Onready-Handlers aufrufen, um unnötiges Durchsuchen der DOM-Struktur zu vermeiden. (Dieser Artikel gibt eine gute Diskussion über die Technik: Don ' Lassen Sie jQuerys $ (document) .ready () verlangsamen )

    
Tgr 16.09.2010 19:00
quelle
0

Genau wie .live() können Sie .delegate() auch außerhalb des Ready-Handlers aufrufen

    
johans 17.09.2010 10:20
quelle

Tags und Links