最近需要在页面的表格上使用的右键弹出菜单,考察了下网络上的几个右键菜单发现都不太符合:需要能够用列表来布局菜单,而不是都放在javascript中控制。Jqueryui 的menu插件采用ul和li来布局,但是菜单项仅仅是个超级链接,不能结合当前被右键单击的元素进行动态传递参数和禁用/启用菜单。于是网上找了个插件自己来改造。
首先增加了几个参数:currentTarget用于保存当前的右键单击事件的对象;actions用于根据菜单id来进行函数绑定;selector用于保存当前应用右键菜单的选择器;options对象用于保存一些其他的扩展参数,比如hover为鼠标滑过菜单的css样式,highlight为当前右键单击元素的css样式。actions对象可以包括多个子对象,每一个子对象可以包含两个函数click和disabled,前者响应用户单击菜单事件,后者则指示是否在当前右键对象上禁用相关菜单。两个函数都将传入两个参数:source和li,source为右键单击的(jquery)对象,li则是当前单击的菜单(jquery)对象。用法示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | <!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