jQuery右键菜单contextMenu使用实例


Posted in Javascript onSeptember 28, 2011

在下面我们将设计一个场景,表格grid需要在每行实现鼠标右键,增加,删除,保存操作。grid我就用gridview了,随便用微软提供的样式,测试用例不用搞的多好看嘛,我也不是做美工了,哈哈,偷偷懒。

先上效果图,是有些同志说的有图才有真相嘛:
jQuery右键菜单contextMenu使用实例
ui代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<%-- --%> 
<script src="Script/jquery.js" type="text/javascript"></script> 
<script src="Script/jquery.contextmenu.r2.js" type="text/javascript"></script> 
<style type="text/css"> 
.SelectedRow 
{ 
background: yellow; 
} 
.contextMenu 
{ 
display: none; 
} 
</style> 
<script type="text/javascript"> 
$(function() { 
$('#GridView1 tr:gt(0)').contextMenu('menu', 
{ 
bindings: 
{ 
'add': function(t, target) { 
alert('Trigger:' + t.id + ' 增加' + " taget by:" + $("td:eq(0)", target).text()); 
}, 
'delete': function(t, target) { 
alert('Trigger:' + t.id + ' 删除' + " taget by:" + $("td:eq(0)", target).text()); 
$(target).remove(); 
}, 
'save': function(t, target) { 
alert('Trigger:' + t.id + ' 保存' + " taget by:" + $("td:eq(0)", target).text()); 
}, 
'About': function(t, target) { 
alert('Code by http://www.cnblogs.com/whitewolf/'); 
} 
}, 
onShowMenu: function(e, menu) { 
if (parseInt($("td:eq(0)", e.currentTarget).text()) > 10) { 
$("#save", menu).remove(); 
} 
$(e.currentTarget).siblings().removeClass("SelectedRow").end().addClass("SelectedRow"); 
return menu; 
} 
}); 
}) 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<div class="contextMenu" id="menu"> 
<ul> 
<li id="add"> 
<img src="image/Home_Age_UnSelect.jpg" width="16" height="16" /> 
编辑</li> 
<li id="delete"> 
<img src="image/Home_Age_UnSelect.jpg" width="16" height="16" /> 
删除</li> 
<li id="save"> 
<img src="image/Home_Age_UnSelect.jpg" width="16" height="16" /> 
保存</li> 
<li id="About"> 
<img src="image/Home_Age_UnSelect.jpg" width="16" height="16" /> 
关于</li> 
</ul> 
</div> 
<asp:GridView ID="GridView1" runat="server" Width="100%" BackColor="White" BorderColor="#CCCCCC" 
BorderStyle="None" BorderWidth="1px" CellPadding="3"> 
<RowStyle ForeColor="#000066" /> 
<FooterStyle BackColor="White" ForeColor="#000066" /> 
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> 
</asp:GridView> 
</div> 
</form> 
</body> 
</html>

注:
1:contextMenu我们互根据数据记录隐藏一些菜单项,这个可以在onShowMenu事件中,根据
e.currentTarget触发源获取数据,在根据remove菜单项。比如测试用例中的:如果id>10则不允许保存
if (parseInt($("td:eq(0)", e.currentTarget).text()) > 10) {
$("#save", menu).remove();
}
2:事件注册:根据第二个参数target获取数据,第一个参数t获取菜单项。比如:
'add': function(t, target) { 
alert('Trigger:' + t.id + ' 增加' + " taget by:" + $("td:eq(0)", target).text()); 
},

在这里需要用到ajax和服务端通讯,可以采用我的上一篇组件:jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法,将会更简单应用ajax通讯。
在我下的源代码中这里有点问题:
原来的,这里的currentTarget始终为undefined。
if (!!cur.onShowMenu) menu = cur.onShowMenu(e, menu); 
$.each(cur.bindings, function(id, func) { 
$('#' + id, menu).bind('click', function(e) { 
hide(); 
func(trigger, currentTarget); 
}); 
});

我修改后:
if (!!cur.onShowMenu) menu = cur.onShowMenu(e, menu); 
$.each(cur.bindings, function(id, func) { 
$('#' + id, menu).bind('click', function(ev) { 
hide(); 
func(trigger, e.currentTarget); 
}); 
});

这样就一切正常了。
内容很少,一切就在此打断,结束 ,over!
附件下载:Demo
Javascript 相关文章推荐
js tab 选项卡
Apr 26 Javascript
JQuery 引发两次$(document.ready)事件
Jan 15 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
Dec 25 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
uni-app如何页面传参数的几种方法总结
Apr 28 Javascript
手把手教你如何编译打包video.js
Dec 09 Javascript
封装了一个js图片轮换效果的函数
Sep 28 #Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 #Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
Sep 28 #Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 #Javascript
javascript权威指南 学习笔记之变量作用域分享
Sep 28 #Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
Sep 28 #Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
Sep 27 #Javascript
You might like
PHP源代码数组统计count分析
2011/08/02 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
php实现session共享的实例方法
2019/09/19 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
Python实现线程池代码分享
2015/06/21 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
django ORM之values和annotate使用详解
2020/05/19 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
Servlet面试题库
2015/07/18 面试题
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python