我不确定该怎么做,我以为我做对了,但显然不对。在第二个代码块中,您将看到console.log()调用,以及我认为您会遍历所有item
的方式,但是这种方式不起作用。我该怎么做?另外,这是一个正在进行的工作,因此所有注释的代码都在这里,但这是主要部分!
提前致谢!
所以,我有这个用于我的jQuery插件调用:
$('p').contextMenu({
item:{
name:'Back',
action:function(){
alert('Back!');
},
icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_back.png'
},
item:{
name:'Forward',
action:function(){
alert('Forward!');
},
icon:'http://cdn.iconfinder.net/data/icons/crystalproject/16x16/actions/agt_forward.png'
}
});
这是我实际的jQuery插件代码:
(function($){
$.fn.extend({
//plugin name - animatemenu
contextMenu: function(menuitems,options) {
if(!options){options == null;}
//Settings list and the default values
var defaults = {
};
var options = $.extend(defaults, options);
return this.each(function() {
var o =options;
//Assign current element to variable, in this case is UL element
var $obj = $(this);
$obj.mousedown(function(event) {
switch (event.which) {
case 1: //Left
//alert('Left mouse button pressed');
break;
case 2: //Middle
//alert('Middle mouse button pressed');
break;
case 3: //Right
//menuitems.item.action();
for(x in menuitems){
console.log(menuitems.item[x])
}
break;
default: //Unknown
}
});
});
}
});
})(jQuery);
最佳答案
您的menuitems对象只能具有一个item
属性,并且在声明中将其覆盖。将menuitems设置为数组:
$('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
循环实际上效率很低,应该避免。 (我的替换循环也可以更有效地编写,但是语法开始看起来很奇怪,您的注释似乎表明与您合作的开发人员可能会有些困惑(不要无礼)。)关于javascript - 遍历jQuery插件选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4150676/