2010-04-29 6 views
2

J'ai lu d'innombrables articles sur comment utiliser le JQuery delegate est beaucoup plus efficace que d'utiliser l'événement "live". En tant que tel, j'ai des problèmes pour convertir mon code Live existant en Delegate. Lorsque je remplace le code précédent par ce que je suppose être un code délégué plus efficace, ma page ne se charge pas.JQuery: comment utiliser "delegate" au lieu de "live"?

$("#tabs li:eq(0)").delegate('click',function(){ //...code }); 
$('#A > div.listing, #B > div.listing, #C > div.listing').delegate('mouseover',function(){ // ...code }); 

Aucune idée de pourquoi mon code de délégué ne fonctionne pas? En outre, des suggestions sur la façon de rendre cela plus efficace?

MISE À JOUR:

La partie de penser le problème est que, à la fois "#tabs" et "#A, #B, #C" are't présent sur la page Web à l'adresse chargement de la page. Ces attributs sont insérés dynamiquement sur la page avec un appel AJAX. En tant que tel, cela signifie-t-il que je dois utiliser Live Over Delegate?

Répondre

2

mise à jour pour votre mise à jour :) - Oui, le bâton avec .live() si tel est le cas, à moins que votre DOM est très profonde, il y a une différence infinitésimale dans la performance.


Réponse précédente: Vos fonctions de délégué devraient ressembler à ceci:

$("#tabs").delegate('li:eq(0)', 'click', function(){ //...code }); 
$('#A, #B, #C').delegate('> div.listing', 'mouseover', function(){ // ...code }); 

Cela dépend #tabs ne pas être dans le contenu qui est remplacé dans le cadre d'un appel ajax, le même pour #A, #B et #C. Le format de .delegate() est la suivante:

$(selectorOrNonReplacedParent).delegate(childSelector, event, function); 
+0

Craver @ Nick, le problème est que, à la fois * "# onglets" * et * "# A, #B, #C" * are't présent sur la page web au chargement de la page. Ces attributs sont insérés dynamiquement sur la page avec un appel AJAX. En tant que tel, quand j'ai fait la modification par votre code - ma page ne charge toujours pas. Des idées sur ce qui cause mon problème? – JacobD

+2

@JacobD - Si ceux-ci ne sont pas présents, alors vous devez coller avec '.live()' ou aller vers un ancêtre supérieur qui * existe * lorsque vous faites cette liaison. '.delegate()' utilise réellement '.live()', ce n'est pas un remplacement complet. –

Questions connexes