Javascript 我的插件不适用于不同的回调

Javascript 我的插件不适用于不同的回调,javascript,jquery,dom,jquery-plugins,Javascript,Jquery,Dom,Jquery Plugins,我正在为不同div的上下文菜单开发一个插件 <div> <div class='first'>some data</div> <div class='second'>some data</div> <div class='third'>some data</div> <div class='fourth'>some data</div> </div> 我正在使

我正在为不同div的上下文菜单开发一个插件

<div>
  <div class='first'>some data</div>
  <div class='second'>some data</div>
  <div class='third'>some data</div>
  <div class='fourth'>some data</div>
</div>
我正在使用这个插件

$('.first').cnxtmenu({menuid:'cmenu',
    item1:some callbacks
});

//...

$('.fourth').cnxtmenu({menuid:'cmenu',
     // soem differt callbacks.
});
对于所有四个div,都分配了不同的回调

我的问题是,选择器的回调没有区别,唯一的最后一个,即第四个选择器的回调正在执行。并且多次触发回调

请帮帮我,我的代码出了什么问题


提前感谢。

在给出的示例中,您将列表
cmenu
作为同一对象传递给每个调用
cnxtmenu()
。由于
cmenu
是持久的,因此当您
解除绑定
单击侦听器时,您将删除以前连接的侦听器,并将其替换为新的侦听器

您或者需要为每个调用
cnxtmenu()
传递不同的上下文菜单,或者您可以尝试重新构造具有多个回调的对象,但根据触发上下文菜单的元素将其过滤掉


另外,除非您受限于jQuery 1.7以下的某个版本,否则您应该使用and,而不是
live()
unbind()

我知道了您的问题,您以错误的方式分配回调。回调将按照您为上一个除法指定的方式进行分配。因此您需要在contextmenu函数中分配回调


第二,调用插件的次数越多,插件代码也会执行,并且作为代码,回调也会在onload中分配。代码更改后无需担心

请描述它应该如何工作。它应该显示不同分区的菜单并触发为该分区分配的回调。所有分区的菜单都相同,唯一的项目是更改,这意味着隐藏一些项目。谢谢帮助!!。你能告诉我为不同的分区显示不同的项目有什么问题吗。和回调正在更改。@kirankumar当您为某个人写评论时,请使用
@
,以便通知该人。编辑您的问题并详细描述其工作原理(例如:用户单击
li#menuItem5
ul
必须消失,
div
中的文本必须更改)。。。现在我对你的话一无所知description@caligula你能先告诉我我的代码执行了多少次吗times@kirankumar当它执行多次时?在什么操作之后?@kirankumar使用
@
并且它执行了两次,因为您两次调用您的方法,例如
$('.first').cnxtmenu(
)。以这种方式创建菜单的次数越多,代码就会运行。
(function($) {
     $.fn.cnxtmenu = function(options) {
          var defaults = {
              'menuid' : '',
               item1 : function() {},
               item2 : function() {},
               item3 : function() {},
               item4 : function() {},
               item5 : function() {},
               item6 : function() {},
          },
          opt = $.extend({}, defaults, options);

          var mid = '#'+opt.menuid, seldiv;
          this.live({
               "contextmenu" : function(e) {
                     seldiv = $(this);
                     if ($(this).hasClass('first')) {
                         //change the menu list         
                     }
                     else if($(this).hasClass('second')){
                         // change the menu list to display different items 
                     } 
                     else if($(this).hasClass('file-list')){
                         //differ list  
                     }
                     else if($(this).hasClass('dstore_file-list')){
                         //differ menu list
                     }
                     $(mid).css({
                          top : e.pageY + 'px',
                          left : e.pageX + 'px'
                     }).show();
                     return false;
                 }
            });

            $(mid).children('li').unbind('click').click(function(e) {
                e.stopPropagation();
                e.preventDefault(); 
                switch(this.id) {
                    case 'menuItem1':
                        opt.item1(this, seldiv);
                        break;
                    case 'menuItem2':
                        opt.item2(this, seldiv);
                        break;
                    case 'menuItem3':
                        opt.item3(this, seldiv);
                        break;
                    case 'menuItem4':
                        opt.item4(this, seldiv);
                        break;
                    case 'menuItem5':
                        opt.item5(this, seldiv);
                        break;
                    case 'menuItem6':
                        opt.item6(this, seldiv);
                        break;
            }
            $(mid).hide();
            return false;
        });

        $(mid).click(function() {
            $(mid).hide();
        });
        $(document).click(function() {
            $(mid).hide();
            });
       }
})(jQuery);
$('.first').cnxtmenu({menuid:'cmenu',
    item1:some callbacks
});

//...

$('.fourth').cnxtmenu({menuid:'cmenu',
     // soem differt callbacks.
});