Я пытаюсь сделать то, что делал много раз.Я не могу понять, почему это не работает.Независимо от того, как я пишу код JQuery, он не работает.menuitems[i].action()
просто НЕ работает.Ниже Пример 1 , в котором этот пример, независимо от того, по какому элементу щелкнули, возвращает действие последнего элемента (в данном примере это alert('Forward!')
).2nd возвращает неопределенное свойство.Полная ошибка ниже.
Мой плагин jQuery называется так (примеры ниже, что происходит с этим же вызовом):
$('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'
}
]);
Пример 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);
}
Это возвращает предупреждение с Вперед!независимо от того, какой элемент, Назад или Вперед, нажат.
Пример 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);
}
Я получаю:
Uncaught TypeError: Невозможно прочитать свойство 'action' из неопределенного
Другие случайные вещи, которые я пробовал, были отсоединение клика и повторное присоединение его за пределами этого блока appendTo()
, изменив action()
на newtest()
, чтобы убедиться, что ононе конфликтует с какими-либо встроенными ключевыми словами.Я также попытался сделать $('body').append('<li>{blah blah}</li>').find('li').click(function(){/*blah blah*/});
, но он все еще возвращал то же самое.У меня нет идей!