jQuery.chacun() non défini problème
J'ai le code suivant
function myFunction(items) {
//this prints out 11
alert(items.length);
$(items).each(function(i, item) {
//item is undefined for some reason
}
}
Elle, j'alerte la longueur des articles, il a des éléments qui le composent (11 pour être exact). comment donc pourrait-11 points, mais jQuery passent toujours pas défini?
Quelle est la valeur de
Quel est le type de
$(this)
à l'intérieur de votre .each()
de rappel? Rien ne semble incorrect de sorte qu'il serait utile de voir un SSCCE.Quel est le type de
items
? est-il un tableau ou d'un tableau comme objet, comme un HTMLCollection
retourné à partir de .getElementsByClassName()
par exemple. De toute façon, pourquoi ne pas simplement utiliser une boucle for?OriginalL'auteur A-Dubb | 2010-07-25
Vous devez vous connecter pour publier un commentaire.
La seule explication à cela est que les éléments de tableau contient des valeurs qui ne sont pas définis, j'.e :
Les deux autres réponses sont totalement erronées. Le premier paramètre de
each
est l'indice, pas la valeur, et jQuery.fn.chaque appels jQuery.chaque. Il n'y a aucune ambiguïté entre eux.Vieux de la mise en œuvre est de Prendre: function () { var retVal = new Array(); for (var index = 0; index < nombre; index++) retVal[retVal.longueur] = ce.les articles[index]; return new JSLINQ(retVal); }
La nouvelle est: function () { var retVal = new Array(); for (var index = 0; index < Math.min(comte, ce.éléments.la longueur); index++) retVal[retVal.longueur] = ce.les articles[index]; return new JSLINQ(retVal); }
OriginalL'auteur Matt
On dirait que vous vous êtes pas le passage d'un
jQuery wrappet set
à votre fonction. Si vous passerun
array
ou unobject
vous devez utiliser lejQuery helper function
$.chacun() commeComme je l'ai déjà mentionné à plusieurs reprises dans d'autres réponses, il est de mauvaise pratique de faire une boucle sur un tableau avec
.each()
ou javascript natiffor..in
.Si vous êtes de passage à
arrays
utiliser un standardfor loop
.modifier
Comme il s'avère, en fait vous ne pouvez vraiment appeler la
jQuery constructor
avec une gamme standard.Mais il semble terrible karma pour ce faire, vous ne pouvez pas appeler 95% de toutes les méthodes jQuery, sauf si vous voulez planter /corrompre votre code.
$.each()
est mieux etfor loop
est le meilleur).Doh je n'étais pas vraiment conscient de cela. Qu'advient-il si vous passez une gamme standard pour le jQuery, le constructeur et l'appel comme
.animate()
ou whatoever sur elle?jAndy - Semble être une défaillance catastrophique (sauf bien sûr si c'était un tableau d'éléments DOM). Une bonne raison de ne pas le faire. Mais là encore, quand vous pensez à ce sujet, c'est ce que jQuery
.map()
. Le rappel de certains retours valeur arbitraire, qui est placé dans un objet jQuery.Animer vont à l'encontre de n'importe quoi. Par exemple: var foo = { x: 10, y: 12 }; $(foo).animate({ x: "+=20", y": "20" }, 1000, function () { alert(foo.x + ":" + foo.y); }); Va cracher "30:20". Est-ce utile? Peut-être pas dans le travail quotidien. 🙂 Le truc avec des tableaux est que vous allez définir la même valeur dans chaque entrée. Exemple: var foo = [{ x: 10 }, { x: 20}]; $(foo).animate({ x: "+=30" }, 1000, function () { alert(this.x); }); Crache "40" et "50".
OriginalL'auteur jAndy
Car les commentaires ne permettent pas de jolies listes de code ... (le font-ils?):
Animer vont à l'encontre de n'importe quoi. Il est documenté que travailler uniquement à l'encontre des propriétés CSS, mais simplement de prouver un point:
Va cracher "30:20". Est-ce utile? Peut-être pas dans le travail quotidien. 🙂
Le truc avec des tableaux est que vous allez ensemble sur la même propriété, à travers chaque entrée. Exemple:
Crache "40" et "50".
OriginalL'auteur OdeToCode