繁体   English   中英

循环遍历jQuery插件选项

[英]Loop through jQuery plugin options

我不知道该怎么做,我以为我做得对,但显然不是。 在第二个代码块中,您将看到一个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 in常规for for in循环非常低效,应该避免。 (我的替换循环也可以更有效地编写,但随后语法开始看起来很奇怪,你的评论似乎表明你使用的开发人员可能会有点困惑(没有意图在那里))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM