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 相关文章推荐
Javascript 学习书 推荐
Jun 13 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
JS动态添加Table的TR,TD实现方法
Jan 28 Javascript
jquery ui dialog替代confirm实例分析
Jan 25 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
Nov 02 Javascript
jQuery表格(Table)基本操作实例分析
Mar 10 Javascript
input输入框内容实时监测(附代码)
Aug 15 Javascript
zTree获取当前节点的下一级子节点数实例
Sep 05 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
vue常用高阶函数及综合实例
Feb 25 Vue.js
封装了一个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下载远程图片函数 可伪造来路
2013/06/25 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
Python装饰器简单用法实例小结
2018/12/03 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python接收手机短信的代码整理
2020/08/02 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
奥巴马演讲稿
2014/01/08 职场文书
休假证明书
2015/06/24 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
SQLServer常见数学函数梳理总结
2022/08/05 MySQL