Ваш объект menuitems может иметь только одно свойство item
, и оно перезаписывается в вашем объявлении.Вместо этого сделайте элементы меню массивом:
$('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'
}
]);
Если вы считаете, что его нужно немного упростить для разработчиков, на которых вы ссылаетесь, возможно, сначала просто определите элементы как переменные.
var items = [ {name: 'Forward'}, {name: 'Back'} ];
$('p').contextMenu(items);
Затем вы можете получить доступ к обоим элементам так, как вы изначально рассчитывали:
var len = menuitems.length;
for (var i = 0; i < len; i++;){
console.log(menuitems[i]);
}
Как примечание, я изменил ваш цикл for in
на обычный for
.Цикл for in
действительно неэффективен, и его следует избегать.(Мой цикл замены также может быть написан более эффективно, но тогда синтаксис начинает выглядеть странно, и ваш комментарий, похоже, указывает на то, что разработчики, с которыми вы работаете, могут немного запутаться (неуважительное намерение)).