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 拖拉缩放效果
Dec 10 Javascript
基于json的jquery地区联动效果代码
Jul 06 Javascript
文档对象模型DOM通俗讲解
Nov 01 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
jQuery中removeAttr()方法用法实例
Jan 05 Javascript
jQuery入门介绍之基础知识
Jan 13 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
Sep 14 Javascript
基于Vue实现拖拽效果
Apr 27 Javascript
vue中实现动态生成二维码的方法
Feb 21 Javascript
原生JS实现拖拽功能
Dec 16 Javascript
vue 导航守卫和axios拦截器有哪些区别
Dec 19 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
php图片裁剪函数
2018/10/31 PHP
javascript 保存文件到本地实现方法
2012/11/29 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js重写方法的简单实现
2016/07/10 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
Python时间的精准正则匹配方法分析
2017/08/17 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python实现图片素描效果
2020/09/26 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
国外平面设计第一市场:99designs
2016/10/25 全球购物
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
酒店管理毕业生自荐信
2013/10/24 职场文书
环境工程求职简历的自我评价范文
2013/10/24 职场文书
高中毕业生自我鉴定例文
2013/12/29 职场文书
手机促销活动方案
2014/02/05 职场文书
黄河的主人教学反思
2014/02/07 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
python ansible自动化运维工具执行流程
2021/06/24 Python
MySQL 数据 data 基本操作
2022/05/04 MySQL