10
votes

JQuery ne renvoie que le premier article

Pour une raison étrange, chaque fois que j'ai un sélecteur et que je m'attendais à obtenir plusieurs articles, JQuery ne renvoie que le premier élément, au lieu de toute la collection.

Ceci est le HTML que j'ai: P>

$('a').each(function (index, element) {
            if ($(element).attr('class') == 'reply') {
                $(this).unbind('click').click(function(event) {
                     ...
                });
             }
});


5 commentaires

Est-ce que console.log ($ ('. Répondre')) ne renvoie vraiment qu'un seul élément?


Êtes-vous sûr que c'est le problème (il ne renvoie qu'un article)? Qu'est-ce que $ ('. Répondre'). Longueur retour?


Dans cette page, j'ai 51 liens sur la page et 7 liens avec une classe "Répondre". $ ('. Répondre'). Longueur; retourne "1", et $ ('a'). longueur; Retour "51" J'ai ce problème sur 2 autres pages qui ne sont pas liées à "Réponses". Il est possible que quelque chose sur ma page empêche le sélecteur de travailler, mais je ne sais pas quoi regarder.


Les autres intervenants ont raison, votre exemple est correct. Vous voudrez peut-être fournir une page complète pour les tests. Ou supprimez du contenu de celui-ci, mais assurez-vous qu'il échoue toujours à votre test. Jusqu'à présent, il n'y a pas d'erreur à discuter.


BTW au lieu d'utiliser si ($ (oly) .attr ('classe') == 'Répondre') Utilisez `if ($ (élément). Hasclass (" Répondre ")`


4 Réponses :


0
votes

qui devrait fonctionner, mais qu'en est-il de ...

$('.reply').each(function() { 
   $(this).unbind('click').click(function(event) {
      ... 
   });
});


1 commentaires

Ce n'est pas le problème,



3
votes

Ce que vous avez devait déjà fonctionner, Vous pouvez voir un exemple ici , c'est un appel simple : XXX

Vous devez avoir quelque chose en dehors de la question affectant vos liens si le même gestionnaire n'est pas exécuté pour tous. Si vous obtenez un attribut à partir du premier seul, assurez-vous À l'intérieur de votre fonction, vous ne faites pas quelque chose comme $ (". Répondre"). ATT ("id") , vous devez utiliser ceci à l'intérieur du gestionnaire, de vous 'll obtenir l'attribut à partir du premier élément correspondant.

Voici un exemple : xxx

Cela devrait être comme celui-ci : xxx


1 commentaires

Oui, je ne vois pas où ils pourraient se tromper ... certainement un simple appel. +1



1
votes

Après avoir quitté la solution de contournement en place pendant quelques mois, j'ai décidé d'essayer de voir s'il y avait quelque chose sur la page qui causait le problème.

Par processus d'élimination, j'ai pu affiner l'erreur dans le fichier jquery.validate.js. Pour une raison inconnue, ce fichier a permis à la jQuery de renvoyer uniquement la première valeur. J'ai téléchargé la dernière version et les sélecteurs renvoient maintenant tous les éléments correspondant.


0 commentaires

27
votes

maladroitement, j'ai aussi eu ce problème et il s'est avéré que Chrome semble avoir une fonction de type $ () JQuery qui implémente un sous-ensemble de logique sélecteur de la même manière, mais manque un tas de fonctions:

> $
function (e,n){return new x.fn.init(e,n,t)} 


3 commentaires

Incidemment, Chrome a également une fonction $$ qui renvoie une gamme d'éléments correspondant au sélecteur. Plus d'infos ici .


@JTHORPE C'est absolument génial, peut-être meurtrier pour faire une propre question concernant Chrome et y répondre. Merci beaucoup


Pourquoi toujours ont-ils choisi '$' pour cela?