JQuery délégué méthode ne fonctionne pas
Je suis en train d'utiliser la méthode du délégué sur une grille que je conclurai avec la DataTables.Net plug-in. J'ai d'abord eu ce code qui fonctionne comme prévu.
$("#myGrid tbody tr").click(function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
Cependant, si je change la taille d'échange ensuite les nouvelles lignes n'ont pas l'événement click de l'appel de la fonction. J'ai décidé de l'JQuery nouveau délégué de la méthode doit faire exactement ce que je voulais; cependant, il ne fait rien du tout sur tout élément tr.
Quelqu'un pourrait-il expliquer pourquoi cela ne fonctionne pas :
$('#myGrid tbody').delegate('tr', 'click', function() {
var id = $(this).children('td').eq(0).text();
alert(id);
});
J'ai essayé différentes combinaisons de la sélection et aucun ne fonctionne.
Merci
Paul Speranza
pourquoi est-ce le wiki de la communauté?
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Utiliser ceci:
.live()
travaille pour le courant de l'avenir éléments.delegate
est pour, sauf qu'il y a de meilleures performances, en raison de la moins nécessaire bouillonnement des événements.Comme
delegate
. Je vous suggère de lire.Merci les gars, j'ai été en évitant les "live", parce que je pensais que ce délégué était censé le remplacer. Je ne comprends toujours pas pourquoi délégué ne fonctionne pas pour moi, mais de vivre n'est et tout est h comme prévu. Encore une fois, merci pour les réponses rapides!
il ne fonctionne pas parce que votre grille est en train d'être remplacé. Si vous souhaitez utiliser délégué, vous auriez à le joindre ci-dessus les éléments remplacés. Dans Alex l'exemple de la manifestation est fixé à la grille au lieu de document comme le fait par défaut...ce qui est plus efficace, car elle signifie moins de bulles, il n'aide pas si cet élément est soufflé dans le cadre de votre AJAX charge. C'est pourquoi il ne fonctionne pas dans ce cas...l'élément d'écoute n'existe pas. Si vous avez eu une div à l'extérieur
id="wrapper"
, alors ce serait le travail:$('#wrapper').delegate('#myGrid tr','click', function() {...
Cela fait tout, sauf de répondre à la question "pourquoi est-délégué de la méthode ne fonctionne pas" confusion qu'il est sélectionné comme réponse. Délégué t remplacer vivre. Il sera probablement obsolète dans les futures versions. C'est une meilleure utilisation de l'événement délégation dans toutes les facettes.
OriginalL'auteur
Essayez plutôt ceci:
Il ya une bonne chance que certains événements sur votre tbody se sont sali avec et/ou votre tbody sont la manipulation. Je doute que l'ensemble de la table souffre de ce problème ainsi.
live
selon la façon dont votre dom est structuré.OriginalL'auteur
Derrière les coulisses,
bind
,delegate
etlive
tous utiliser la méthodeon
.J'ai eu quelques problèmes avec
delegate
, donc j'ai commencé à utiliseron
à la place.La conversion de votre
delegate
appels àon
est facile: il suffit d'échanger le premier et le deuxième argument.Ce:
Devient:
BTW:
live
est obsolète dans une version plus récente de jQuery"on" ne fonctionne pas sur iPhone ou iPad, ni ne vit. Délégué fonctionne si vous déléguez la exacte de l'élément d'où il l'habitude de travailler pour ajax mise à jour des éléments. Son un vrai casse-tête - et je n'ai pas trouvé une bonne solution pour quelque chose d'aussi simple que de cliquer sur des lignes dans une table qui est mise à jour par le biais de l'ajax!
J'ai personnellement utilisé
on
sur iphone, ipad et android 2,3 et 4, et cela a fonctionné. est-il possible que peut-être vous n'êtes pas à l'aide de jQuery sur ces plates-formes?OriginalL'auteur
Essayer cette
ou
OriginalL'auteur
Si les nouvelles lignes sont ajoutées dynamiquement, vous devez utiliser
live
méthode sur les éléments, changer ladelegate
àlive
delegate
n'-c'est juste un événement délégation commelive
.delegate
utiliselive
à la base, mais il a une meilleure performance que de vivre en utilisant les cas de délégation à un ancêtre commun qui n'est pas le document de base.OriginalL'auteur