11
votes

JQuery Plugin renvoyant "Impossible de lire la propriété d'indéfinie"

J'essaie de faire quelque chose que j'ai fait de nombreuses fois. Je ne peux pas comprendre pourquoi cela ne fonctionne pas. Peu importe comment j'écris le code JQuery, cela ne fonctionne pas. Menuitems [i] .action () code> ne fonctionne pas. Ci-dessous est Exemple 1 Strort> dans lequel cet exemple, quel que soit votre article, il renvoie l'action du dernier élément (dans cet exemple, c'est l'alerte ('Transférer!'). Le 2ème retourne une propriété non définie. L'erreur complète ci-dessous.

Mon plugin JQuery est appelé comme ceci (des exemples ci-dessous sont ce qui se passe avec ce même appel): p> xxx pré>

Exemple 1: Strong> P>

var len = menuitems.length;
for (var i = 0; i < len; i++){
    $('<li/>',{
        'html':'<img src="'+menuitems[i].icon+'">'+menuitems[i].name,
        'click':function(){
            menuitems[i].action();
        },
        'class':o.itemClass
    }).appendTo('.'+o.listClass);
}


7 commentaires

Avez-vous essayé de marcher avec un débogueur?


Avez-vous des recommandations sur un débogueur? J'utilise simplement l'inspecteur de Chrome


Même erreur dans Firebug ...


L'exact en Firebug est: Menuitems [I] est un fichier indéfini: /// C: / Utilisateurs / Oscargodson / Documents / JQuery_Apps / ContextMe NU.HTML Line 65


Awh ... une chose à noter tho gars, si j'ignore comme var test = ménulseurs [i] ce n'est plus non défini mais il ne fait que La toute dernière action () sur chaque article (comme je l'ai dit ci-dessus, ce serait alerte ('Forward!')


Définissez un point d'arrêt avant d'entrer dans la boucle et d'inspecter ménulsems


Je ne sais pas ... je veux dire, il semble casser quand il entre dans la fonction Click (). Même si je le mettais dans un Var à l'extérieur de la boucle, à l'intérieur de la boucle ou n'importe où. Si je ne le mettez pas dans un var du tout, il est indéfini à l'intérieur du clic. IM Outta Idées. Et quand je veux dire "pause", je veux dire essentiellement supprimer tous les objets sauf le dernier


3 Réponses :


0
votes

Habituellement, ce problème est que, dans la dernière itération, vous avez un objet vide ou un objet indéterminé. Utilisez la console.log () à l'intérieur de votre cicle pour vérifier que cette question est arrivée.

Parfois, un prototype dans un endroit ajoutez un élément supplémentaire.


0 commentaires

16
votes

Le problème est que "i" est incrémenté, alors au moment où l'événement de clic est exécuté, la valeur de i est égale à LEN. Une solution possible consiste à capturer la valeur de I à l'intérieur d'une fonction: xxx

dans l'échantillon ci-dessus, la fonction anonyme crée une nouvelle portée qui capture la valeur actuelle de i, de sorte que lorsque le clic L'événement est déclenché la variable locale est utilisée à la place des I de la boucle pour la boucle.


1 commentaires

Génie! Duh, je ne peux pas croire que je n'y pensais pas ... Merci, cela fonctionnera. Merci un tas



0
votes

J'ai eu le même problème avec le plug-in 'Parallax'. J'ai changé la version de la bibliothèque de jquery vers * jquery-1.6.4 * à partir de * jquery-1.10.2 *. Et erreur effacée.


0 commentaires