最近需要在页面的表格上使用的右键弹出菜单,考察了下网络上的几个右键菜单发现都不太符合:需要能够用列表来布局菜单,而不是都放在javascript中控制。Jqueryui 的menu插件采用ul和li来布局,但是菜单项仅仅是个超级链接,不能结合当前被右键单击的元素进行动态传递参数和禁用/启用菜单。于是网上找了个插件自己来改造。
首先增加了几个参数:currentTarget用于保存当前的右键单击事件的对象;actions用于根据菜单id来进行函数绑定;selector用于保存当前应用右键菜单的选择器;options对象用于保存一些其他的扩展参数,比如hover为鼠标滑过菜单的css样式,highlight为当前右键单击元素的css样式。actions对象可以包括多个子对象,每一个子对象可以包含两个函数click和disabled,前者响应用户单击菜单事件,后者则指示是否在当前右键对象上禁用相关菜单。两个函数都将传入两个参数:source和li,source为右键单击的(jquery)对象,li则是当前单击的菜单(jquery)对象。用法示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""> <html> <head> <link rel="stylesheet" type="text/css" href="jqcontextmenu.css" /> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="jqcontextmenu.js"></script> <style> .myhighlight{ background-color:#DEDEDE; } .myjqhover{ background-color:#DEDEDE; } </style> <script type="text/javascript"> //Usage: $(elementselector).addcontextmenu('selector',actions,options) jQuery(document).ready(function($){ $('p').addcontextmenu('contextmenu1',{ 'item1':{//对应菜单的ID click:function(source,li){//需要进行单击菜单响应的 //alert(source); alert(source.attr('id')); } }, 'item2':{ click:function(source,li){ alert(source.attr('id')+":"+li.attr('id')); }, disabled:function(source,li){//需要进行启用/禁用控制的 if(source.attr('id')=='dp'){ return true;//禁用 } return false;//启用 } }, 'item31':{ click:function(source,li){ alert(li.attr('id')); } }, 'item521':{ click:function(source,li){ alert(li.attr('id')); //alert(li.attr('id')); } } },{highlight:'myhighlight',hover:'myjqhover'}); //apply context menu to links with class="mylinks" }); </script> </head> <body> <p id="dp"><a class="mylinks" href="#1" id="dynamic">Dynamic Drive</a></p> <p id="dp2"><a class="mylinks" href="#2" id="dynamic2">Dynamic Drive2</a></p> <div id="div" style="float:right">dadfasd</div> <!--HTML for Context Menu 1--> <ul id="contextmenu1" class="jqcontextmenu"> <li id="item1"><div>Item 1a</div></li> <li class="sep"></li> <li id="item2"><div>Item 2a</div></li> <li id="item3"><div>Item Folder 3a</div> <ul> <li id="item31"><div>Sub Item 3.1a</div></li> <li id="item3.2"><div>Sub Item 3.2a</div></li> <li id="item3.3"><div>Sub Item 3.3a</div></li> <li id="item3.4"><div>Sub Item 3.4a</div></li> </ul> </li> <li id="item4"><div>Item 4a</div></li> <li id="item5"><div>Item Folder 5a</div> <ul> <li id="item5.1"><div>Sub Item 5.1a</div></li> <li id="item5.2"><div>Item Folder 5.2a</div> <ul> <li id="item521"><div>Sub Item 5.2.1a</div></li> <li id="item5.2.2"><div>Sub Item 5.2.2a</div></li> <li id="item5.2.3"><div>Sub Item 5.2.3a</div></li> <li id="item5.2.4"><div>Sub Item 5.2.4a</div></li> </ul> </li> </ul> </li> <li id="item6"><div>Item 6a</div></li> </ul> </body> </html>
这个插件是在jquery 1.7以上版本进行修改和测试,jqcontextmenu项目osc地址。
参考链接:
jQuery Context Menu script
Bunch Of Widely Used jQuery Context Menus
arnklint/jquery-contextMenu
medialize/jQuery-contextMenu
wdContextMenu Samples vs Code
jQuery右键菜单插件ContextMenu使用笔记
jQuery右键菜单插件ContextMenu
好文拜读. courages.us 好样的.
开发人员要找开源软件及相关资料,介绍个好去处 http://www.boyunjian.com/?fm=9003