2012-08-26 1 views
6

Ich habe gerade festgestellt, dass live() in jQuery bereits veraltet ist. Ich habe eine kurze Frage (nur um sicherzustellen, welche Methode am effizientesten, am schnellsten und aktuellsten ist). Ich habe myfunction() und ich möchte bind() es zu allen aktuellen und zukünftigen Elementen mit .Wie fügt man allen aktuellen und zukünftigen Elementen das jQuery-Ereignis hinzu?

Ist das, was soll ich verwenden:

jQuery("???").bind("mouseup", myfunction); 
jQuery("???").bind("keyup", myfunction); 

Oder diese:

jQuery("???").delegate("???", "mouseup", myfunction); 
jQuery("???").delegate("???", "keyup", myfunction); 

Oder diese:

jQuery("???").on("mouseup", "???", myfunction); 
jQuery("???").on("keyup", "???", myfunction); 

ich auch Problem Angabe richtigen Wähler mit (s) - weil einige von ihnen es erlauben, Ereignisse an eine Sache anzuhängen (wie Körper oder Dokument) und sie erlauben einen zweiten Selektor.

Antwort

9

Verwenden .on() stattdessen mit einem attribute equals selector:

$(document).on('mouseup', '[title="x"]', myfunction); 
+0

Vielen Dank! Das ist, was ich suche :) Ich denke, dass die Frage bereits beantwortet ist. – Atadj

+0

@Paul: Wenn Sie ein gemeinsames Elternelement für die Elemente haben, die mit dem Selektor '[title =" x "]' übereinstimmen, ersetzen Sie '$ (document)' durch '$ (" # id_of_common_parent ")' wie es sein wird effizienter. –

+0

Danke! Eine letzte Sache - was, wenn ich "contentEditable" anstelle von "Title" und "contentEditable" verwenden möchte, kann sein: (1) 'contentEditable =" contentEditable "', (2) 'contentEditable =" true "' oder nur 'contentEditable '. Das sind 3 Attribute, die als "wahr" markiert sind - im Falle von "title =" x "gibt es nur eine Möglichkeit. Das ist der zweite Fall, für den ich es brauche. – Atadj

6

Die Syntax, die .live() ersetzt ist wie folgt:

$('#parent').on('keyup mouseup', '.children', myfunction); 
+0

Gut zu wissen, dass ich zusammen zwei Ereignisse mischen diese mit. Vielen Dank! Ich frage mich auch, was mein Selektor wäre - und warum haben sie geschrieben, dass 'live()' nicht effizient ist? Ist es das Gleiche mit 'on()'? – Atadj

+0

Es gibt eine Liste von Problemen mit '.live()' auf der API-Seite für diese Methode: http://api.jquery.com/live/ – Blender