J'essaie de faire quelque chose que j'ai fait de nombreuses fois. Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. Peu importe comment j'écris le code jQuery, ça ne marche pas. menuitems[i].action()
ne fonctionne tout simplement pas. Ci-dessous est Exemple 1 dans lequel cet exemple, quel que soit l'élément est cliqué, il renvoie l'action du dernier élément (dans cet exemple, il est le alert('Forward!')
). La 2ème renvoie une propriété non définie. L'erreur complète ci-dessous.Le plugin jQuery renvoyant "Impossible de lire la propriété de undefined"
Mon plugin jQuery est appelé comme celui-ci (exemples ci-dessous sont ce qui se passe avec ce même appel):
$('p').contextMenu([
{
name:'Back',
action:function(){
alert('Back!');
},
icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_back.png'
},
{
name:'Forward',
action:function(){
alert('Forward!');
},
icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_forward.png'
}
]);
Exemple 1:
for (i in menuitems){
$('<li/>',{
'html':'<img src="'+menuitems[i].icon+'">'+menuitems[i].name,
'class':o.itemClass,
'click':function(){
menuitems[i].action();
}
}).appendTo('.'+o.listClass);
}
Cela renvoie une alerte à l'avant! quel que soit l'élément, Back ou Forward, est cliqué.
Exemple 2:
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);
}
Je reçois:
Uncaught TypeError: Cannot read property 'action' of undefined
Autres choses au hasard i essayé se détacher le clic et reconnectez-dehors de ce bloc appendTo()
, changé action()
à newtest()
pour faire Assurez-vous qu'il n'était pas en conflit avec les mots-clés intégrés. J'ai aussi essayé de faire un $('body').append('<li>{blah blah}</li>').find('li').click(function(){/*blah blah*/});
mais il restait toujours la même chose. Je suis sorti des idées!
Avez-vous essayé de le faire avec un débogueur? – Phil
Avez-vous des recommandations sur un débogueur? Je n'utilise que l'inspecteur de Chrome –
Essayez firebug, un addon firefox – subosito