0

我开发了一个用于分配上下文菜单的插件。html代码:

<ul id='list1'>
 <li class='item'>Items</li>
 <li class='item'>Items</li>
 <li class='item'>Items</li>
  ...
</ul>

jQuery插件代码:

$(function(){
 $.fn.cnxtmenu=function(options){
   this.bind('contextmenu',function(){
    //To display menu
    });
  }
});

插件的使用:

$('#list1').cnxtmenu(options);
$('.item').cnxtmenu(options);

我的问题是插件代码执行了很多次。

4

1 回答 1

1

我的第一个猜测是,当您将处理程序附加到几个元素以及它们的容器时,事件正在冒泡并且处理程序执行了两次。所以,在你的bind,试试这个:

// Remember to pass 'ev' to the handler
this.bind('contextmenu',function(ev){
    ev.stopPropagation();
    //To display menu
});

正如我告诉你的,这是我的第一个猜测。我需要触发contextmenu事件的代码才能给出更准确的答案。如果您的代码正在执行,那么您必须在某个地方$(something).trigger('contextmenu')

于 2012-08-23T07:20:42.457 回答