Ich versuche etwas zu tun, was ich schon oft gemacht habe. Ich kann nicht herausfinden, warum das nicht funktioniert. Egal wie ich den jQuery Code schreibe, es funktioniert nicht. menuitems[i].action()
funktioniert einfach nicht. Unten ist Beispiel 1 in dem dieses Beispiel, egal welches Element geklickt wird, die Aktion des letzten Elements zurückgibt (in diesem Beispiel ist es die alert('Forward!')
). Die 2. gibt undefined Eigenschaft zurück. Der vollständige Fehler unten.jQuery plugin returning "Kann Eigenschaft von undefined nicht lesen"
Meine jQuery-Plugin wird wie folgt aufgerufen (Beispiele unten sind, was mit diesem gleichen Anruf passieren):
$('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'
}
]);
Beispiel 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);
}
Dies gibt eine Warnung mit Forward! egal auf welchen Gegenstand, Zurück oder Vorwärts, geklickt wird.
Beispiel 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);
}
ich:
Uncaught TypeError: Cannot read property 'action' of undefined
andere zufällige Dinge, die ich versuchte, wurden die Klick abgenommen und es außerhalb dieses appendTo()
Block wieder anbringen, geändert action()
zu newtest()
zu machen sicher, dass es keinen Konflikt mit irgendwelchen eingebauten Keywords gab. Ich habe auch versucht, eine $('body').append('<li>{blah blah}</li>').find('li').click(function(){/*blah blah*/});
, aber es immer noch die gleiche Sache. Ich habe keine Ideen!
Haben Sie versucht, dies mit einem Debugger zu durchlaufen? – Phil
Haben Sie Empfehlungen zu einem Debugger? Ich verwende nur Chrome Inspektor –
Versuchen Sie, firebox, ein Firefox-Addon – subosito