Плагин jQuery, возвращающий сообщение «Невозможно прочесть свойство undefined»

Я пытаюсь сделать то, что делал много раз. Я не могу понять, почему это не работает. Как бы я ни писал код jQuery, он не работает. menuitems [i] .action () просто НЕ работает. Ниже Пример 1 , в котором этот пример, независимо от того, на какой элемент был нажат, он возвращает действие последнего элемента (в этом примере это предупреждение («Вперед!») ). Второй возвращает неопределенное свойство. Полная ошибка ниже.

Мой плагин 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);
}

Это возвращает предупреждение с помощью Forward! независимо от того, какой элемент, Назад или Вперед, был нажат.

Пример 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: Невозможно прочитать

Мой плагин 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);
}

Это возвращает предупреждение с помощью Forward! независимо от того, какой элемент, Назад или Вперед, был нажат.

Пример 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: Невозможно прочитать

Мой плагин 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);
}

Это возвращает предупреждение с помощью Forward! независимо от того, какой элемент, Назад или Вперед, был нажат.

Пример 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 of undefined

Другие случайные вещи, которые я пробовал: отсоединение щелчка и его повторное присоединение за пределами этого блока appendTo () , изменено action () на newtest () , чтобы убедиться, что он не конфликтует с какими-либо встроенными ключевыми словами. Я также пробовал сделать $ ('body'). Append ('

  • {blah blah}
  • ') .find ('li'). Click (function () {/ * blah blah * /}); , но он все равно вернул то же самое. У меня нет идей!

    11
    задан Oscar Godson 12 November 2010 в 05:18
    поделиться