转自:http://blog.csdn.net/luoyeyu1989/article/details/7201345

注意:

.live() was introduced in jQuery 1.3, therefore it won't work with earlier versions.

.live() has also since been deprecated in jQuery 1.7 onwards.

The alternatives are .on() and .delegate()

See related question jQuery 1.9 .live() is not a function on how to migrate existing code.

代码中使用的是jquery 1.5 所以可以使用.live函数

用on绑定未来元素:

//放在$(function(){})里才有效 
$(document).on("click", "#testDiv", function(){ 
//此处的$(this)指$( "#testDiv"),而非$(document) 
});

绑定已有元素和未来元素

$(function(){
//动态添加
$(".add").on("click",function(){
console.log("进来了");
$(".info").append('<div class="delete"><h3>单击我来删除我</h3></div>');
});
 //对动态添加的元素添加事件-删除
$(".info").on("click",".delete",function(){
console.log("进来了Delete!");
$(this).remove();
});
 });

[javascript] view plain copy
  1. /*可编辑的表格插件v1.0*/
  2. /*author:尘絮缘 xcl  date:2011-12-02*/
  3. /*update:2011-12-05*/
  4. /*qq:80213876          */
  5. /*说明:
  6. 双击行编辑,再双击则保存
  7. 更多参数,请参照最下方的:defaults
  8. */
  9. var tableListInfo = {
  10. init: function(options) {
  11. options = $.extend(tableListInfo.defaults, options); //这里其实就是合并多个对象为一个。这里就是,如果你在调用的时候写了新的参数,就用你新的参数,如果没有写,就用默认的参数。
  12. //滑过变色
  13. $(options.tableClass).hover(function() {
  14. $(this).addClass(options.trHoverClass);
  15. }, function() {
  16. $(this).removeClass(options.trHoverClass);
  17. });
  18. //设置奇数行和偶数行的样式
  19. $(options.tableClass + ":odd").addClass(options.trOddClass);
  20. $(options.tableClass + ":even").addClass(options.trEvenClass);
  21. //单击选中
  22. $(options.tableClass).live("click", function() {
  23. $(this).hasClass(options.trSelectedClass) ? $(this).removeClass(options.trSelectedClass) : $(this).addClass(options.trSelectedClass);
  24. return false;
  25. });
  26. //全选
  27. $(options.selectAllClass).live("click", function() {
  28. $(options.tableClass).addClass(options.trSelectedClass);
  29. return false;
  30. });
  31. //全不选
  32. $(options.selectNothingClass).live("click", function() {
  33. $(options.tableClass).removeClass(options.trSelectedClass);
  34. return false;
  35. });
  36. //反选
  37. $(options.selectOtherClass).live("click", function() {
  38. $(options.tableClass).each(function() {
  39. $(this).hasClass(options.trSelectedClass) ? $(this).removeClass(options.trSelectedClass) : $(this).addClass(options.trSelectedClass);
  40. });
  41. return false;
  42. });
  43. //删除
  44. $(options.delClass).live("click", function() {
  45. var ids = [];
  46. var trObjs = [];
  47. $(options.tableClass).each(function() {
  48. if ($(this).hasClass(options.trSelectedClass)) {
  49. ids.push($(this).attr(options.idAttr));
  50. trObjs.push($(this));
  51. }
  52. });
  53. if (ids.length > 0) {
  54. if (options.delCallBack != null) {
  55. var str=options.delCallBack(ids, trObjs).split(",");//删除失败的ID数组
  56. for (var i = 0; i < trObjs.length; i++)
  57. {
  58. var flag=1;
  59. for(var m=0;m<str.length;m++)
  60. {
  61. if(trObjs[i].attr(options.idAttr)==str[m])//删除失败的行
  62. {
  63. flag=0;break;
  64. }
  65. }
  66. if(flag==1)
  67. {
  68. trObjs[i].fadeTo("normal", 0.6, function() {$(this).remove();});
  69. }
  70. }
  71. }
  72. }
  73. return false;
  74. });
  75. //编辑
  76. $(options.editClass).live("click", function() {
  77. var ids = [];
  78. var trObjs = [];
  79. $(options.tableClass).each(function() {
  80. if ($(this).hasClass(options.trSelectedClass)) {
  81. ids.push($(this).attr(options.idAttr));
  82. trObjs.push($(this));
  83. }
  84. });
  85. if (ids.length > 1) {
  86. alert(options.trEditMsg);
  87. return false;
  88. }
  89. else if (ids.length == 1) {
  90. if (options.editCallBack != null) {
  91. options.editCallBack(ids, trObjs);
  92. }
  93. }
  94. return false;
  95. });
  96. //单击“全部取消编辑”按钮
  97. $(options.cancleAllClass).live("click", function() {
  98. $(options.tableClass + " .cancleEditCurrentTr").click();
  99. return false;
  100. });
  101. //单击行后面的"取消编辑"
  102. $("a.cancleEditCurrentTr").live("dblclick", function(event) {
  103. event.stopPropagation();
  104. return false;
  105. }).live("click", function(event) {
  106. $parnetTr = $(this).closest("tr");
  107. $parnetTr.html(unescape($parnetTr.attr("oldInfo"))).removeAttr("oldInfo");
  108. event.stopPropagation();
  109. return false;
  110. });
  111. //双击tr(事件切换,双击编辑,再双击则保存)
  112. $(options.tableClass).live("dblclick", function(event) {
  113. if ($(this).attr("oldInfo") == undefined) {//当前tr不在编辑状态
  114. $(this).attr("oldInfo", escape($(this).html())); //保存未编辑时的tr的html
  115. //生成可编辑的tr
  116. if (options.trSaveCallBack != null) {
  117. if(options.tdEnableEditClass=="") return false;
  118. $currentTds=$(this).find("td"+options.tdEnableEditClass)
  119. $currentTrLineTr = $(this);
  120. $currentTds.each(function(i) {
  121. var v = $.trim($(this).text());
  122. $(this).html("<input type=\"text\" " + options.tdEditInputAttr + " class=\"" + options.tdEditInputClass + "\" value=\"" + v + "\"/>");
  123. if (i == $currentTds.length - 1)//如果是最后一个td,则在后面生成一个按钮“取消编辑”
  124. {
  125. $($currentTds[i]).find("." + options.tdEditInputClass).after("<a href=\"javascript:void(0);\" class=\"cancleEditCurrentTr\">" + options.cancleBtnText + "</a>");
  126. }
  127. });
  128. }
  129. }
  130. else { //保存tr回调数据
  131. //提取当前行的每列数据,并存到数组中。
  132. var trValue = [];
  133. $(this).find("td").each(function() {
  134. if ($(this).find(":input").length > 0)//如果该列中有input,则提取出来
  135. {
  136. trValue.push($.trim(escape($($(this).find(":input")[0]).val())));
  137. }
  138. else {
  139. trValue.push($.trim(escape($(this).text())));
  140. }
  141. });
  142. if (options.trSaveCallBack($(this).attr(options.idAttr), trValue) == 1) {
  143. //保存成功
  144. $(this).removeAttr("oldInfo");
  145. $(this).find("td").each(function(i) {
  146. $(this).html(unescape(trValue[i]));
  147. });
  148. }
  149. else {//保存失败
  150. //$(this).html(unescape($(this).attr("oldInfo"))).removeAttr("oldInfo");
  151. }
  152. }
  153. event.stopPropagation();
  154. return false;
  155. });
  156. //单击全部保存
  157. $(options.saveAllClass).live("click", function() {
  158. if (options.trSaveAllCallBack != null) {
  159. var currentEditObjs = [];
  160. var ids = [];
  161. for (var i = 0; i < $(options.tableClass).length; i++) {
  162. if ($($(options.tableClass)[i]).attr("oldInfo") != undefined) {
  163. currentEditObjs.push($($(options.tableClass)[i]));
  164. ids.push($($(options.tableClass)[i]).attr(options.idAttr));
  165. }
  166. }
  167. if(currentEditObjs.length==0)return false;
  168. var failIds = (options.trSaveAllCallBack(ids, currentEditObjs)).split(","); //返回的是保存失败的id集合(用|分隔的字符串)
  169. for (var m = 0; m < currentEditObjs.length; m++) {
  170. var flag = 0;
  171. for (var f = 0; f < failIds.length; f++) {
  172. //失败
  173. if (failIds[f] == currentEditObjs[m].attr(options.idAttr)) {
  174. //currentEditObjs[m].html(unescape(currentEditObjs[m].attr("oldInfo"))).removeAttr("oldInfo");
  175. flag = 1;
  176. break;
  177. }
  178. }
  179. if (flag == 1) continue;
  180. //提取当前行的每列数据,并存到数组中。
  181. var trValue = [];
  182. currentEditObjs[m].find("td").each(function() {
  183. if ($(this).find(":input").length > 0)//如果该列中有input,则提取出来
  184. {
  185. trValue.push($.trim(escape($($(this).find(":input")[0]).val())));
  186. }
  187. else {
  188. trValue.push($.trim(escape($(this).text())));
  189. }
  190. });
  191. currentEditObjs[m].removeAttr("oldInfo");
  192. currentEditObjs[m].find("td").each(function(i) {
  193. $(this).html(unescape(trValue[i]));
  194. });
  195. }
  196. }
  197. return false;
  198. });
  199. },
  200. defaults: {//注意样式和选择器
  201. tableClass: ".tableList tr:gt(0)", //表格容器class
  202. trHoverClass: "trHover", //滑过的样式
  203. trSelectedClass: "trSelected", //选中的样式
  204. delClass: ".delSelected", //删除按钮class
  205. editClass: ".editSelected", //编辑按钮class
  206. selectAllClass: ".selectAll", //全选按钮class
  207. selectNothingClass: ".selectNothing", //全不选按钮class
  208. selectOtherClass: ".selectOther", //反选按钮class
  209. idAttr: "ref", //存放ID的行属性
  210. delCallBack: null, //删除回调函数(ids:ref的属性值集合;trObjs:要删除的行jq对象数组)
  211. editCallBack: null, //编辑回调函数(ids:ref的属性值集合;trObjs:要编辑的行jq对象数组)
  212. trSaveCallBack: null, //双击正在编辑的tr保存回调函数(id:当前行的ref的属性值;trObj:要编辑的tr的jq对象)
  213. trSaveAllCallBack: null, //全部保存回调函数(ids:当前行的ref的属性值;trObjs:要编辑的tr的jq对象)
  214. tdEnableEditClass: ".enableEdit", //为""则每个td都不可以编辑,如果不为空,则指定class的td能编辑
  215. tdEditInputClass: "EditInput", //正在编辑列中的Input的样式
  216. tdEditInputAttr: "", //正在编辑列中的Input的其它属性,格式:"name='xxx'  id='xx'"
  217. trOddClass: "trOdd", //奇数行样式
  218. trEvenClass: "trEven", //偶数行样式
  219. trEditMsg: "只能选一项进行编辑!", //如果选了多条记录进行编辑时的提醒语
  220. cancleBtnText: "取消编辑", //当编辑tr时,后面的取消按钮的文字
  221. cancleAllClass: ".cancleEditAll", //全部取消按钮class
  222. saveAllClass: ".saveEditAll"//全部保存按钮class
  223. }
  224. }
[css] view plain copy
  1. /*css hack by xcl  2011-12-01*/
  2. .trHover{background:#eee!important;color:#f00;}
  3. .trSelected{background:#9f6!important;color:#f00;}
  4. .tableList{border:solid 1px #95b3d7;border-collapse:collapse;}
  5. .tableList td{border:solid 1px #95b3d7;}
  6. .trOdd{background:#F2FFFF;}
  7. .trEven{background:#F0F5FF;}
  8. .EditInput{width:80px;}
[html] view plain copy
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title> table</title>
  5. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  6. <script type="text/javascript" src="table.min.js"></script>
  7. <link href="table.css" rel="stylesheet" type="text/css"/>
  8. <script type="text/javascript">
  9. $(function() {
  10. tableListInfo.init({ tableObj: ".tableList tr:gt(0)", tdEnableEditClass: ".enableEdit",
  11. delCallBack: function(ids, trObjs) {
  12. alert("1,3,4删除失败!");
  13. return "1,3,4";//删除失败的id号
  14. },
  15. editCallBack: function(ids, trObjs) {
  16. alert(ids +"\n"+trObjs[0].html());
  17. },
  18. trSaveCallBack: function(id, trVlaue) {
  19. return 1;//保存成功则返回1
  20. },
  21. trSaveAllCallBack:function(ids,trObjs){
  22. alert("10,11,13更新失败!");
  23. return "10,11,13";//保存失败的ID号
  24. }
  25. });
  26. })
  27. </script>
  28. </head>
  29. <body>
  30. <div>
  31. <table class="tableList" style="width:100%;text-align:center;">
  32. <tr>
  33. <td width="25%">标题</td>
  34. <td width="25%">标题</td>
  35. <td width="25%">标题</td>
  36. <td width="25%">标题</td>
  37. </tr>
  38. <tr ref="1">
  39. <td>ASP.NET</td>
  40. <td class="enableEdit">C#</td>
  41. <td class="enableEdit">vb.net</td>
  42. <td>mvc</td>
  43. </tr>
  44. <tr ref="2">
  45. <td class="enableEdit">.NET</td>
  46. <td class="enableEdit">C#</td>
  47. <td class="enableEdit">vb.net</td>
  48. <td class="enableEdit">mvc</td>
  49. </tr>
  50. <tr ref="3">
  51. <td class="enableEdit">JAVA</td>
  52. <td class="enableEdit">C#</td>
  53. <td class="enableEdit">vb.net</td>
  54. <td class="enableEdit">mvc</td>
  55. </tr>
  56. <tr ref="4">
  57. <td class="enableEdit">C#</td>
  58. <td class="enableEdit">C#</td>
  59. <td class="enableEdit">vb.net</td>
  60. <td class="enableEdit">mvc</td>
  61. </tr>
  62. <tr ref="5">
  63. <td class="enableEdit">RUBY</td>
  64. <td class="enableEdit">C#</td>
  65. <td class="enableEdit">vb.net</td>
  66. <td class="enableEdit">mvc</td>
  67. </tr>
  68. <tr ref="6"><td class="enableEdit">C++</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  69. <tr ref="6"><td class="enableEdit">MS</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  70. <tr ref="8"><td class="enableEdit">C</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  71. <tr ref="9"><td class="enableEdit">LOGO</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  72. <tr ref="10"><td class="enableEdit">JAVA EE</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  73. <tr ref="11"><td  class="dis">OBJECT C</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td  class="dis">mvc</td></tr>
  74. <tr ref="12"><td class="enableEdit">WM</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  75. <tr ref="13"><td class="enableEdit">WPPP</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  76. <tr ref="14"><td class="enableEdit">TTTT</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr>
  77. </table>
  78. <div style="width:100%">
  79. <a href="javascript:void(0);" class="selectAll">全选</a>
  80. <a href="javascript:void(0);" class="selectNothing">全不选</a>
  81. <a href="javascript:void(0);" class="selectOther">反选</a>
  82. <a href="javascript:void(0);" class="editSelected">编辑已选项</a>
  83. <a href="javascript:void(0);" class="delSelected">删除已选项</a>
  84. <a href="javascript:void(0);" class="cancleEditAll">全部取消编辑</a>
  85. <a href="javascript:void(0);" class="saveEditAll">全部保存编辑</a>
  86. </div>
  87. </div>
  88. </body>
  89. </html>

下载地址:http://ishare.iask.sina.com.cn/f/22778265.html

可编辑的jquery表格插件相关推荐

  1. jQuery 表格插件汇总

    本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分页,对表格进行滚动,拖放操作等等.这 ...

  2. jQuery 表格插件

    本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分页,对表格进行滚动,拖放操作等等.这 ...

  3. 25款顶级的jQuery表格插件

    jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...

  4. html 表格过滤功能,简单的带排序和过滤功能的jQuery表格插件

    smart-table是一款简单实用的带排序和过滤功能的jQuery表格插件.该jQuery表格插件通过简单的设置就可以生成表格排序.表格字段过滤功能,甚至可以实现表格分页显示,使用非常方便. 使用方 ...

  5. Jquery 表格插件DataTables

    [转]Jquery 表格插件DataTables 博客分类: Jquery jquerydatatablesjavascript  1.特性 可变长度分页: 动态过滤: 多列排序,带数据类型检测功能: ...

  6. 15 个最佳的 jQuery 表格插件

    现如今,网站开发设计的需求会要求自动适应所有移动设备,即响应式网站: 在开发网站时必须考虑对平板设备融合 fluid(流)和自适应性特点. 大多数网站设计要靠margins, guides, rows ...

  7. jquery表格插件jqgrid

    jqGrid学习之 ------------- 安装 jqGrid安装很简单,只需把相应的css.js文件加入到页面中即可.  按照官网文档: /myproject/css/              ...

  8. ABP入门系列(14)——应用BootstrapTable表格插件

    1. 引言 之前的文章ABP入门系列(7)--分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用.后台管理系统中的数据展示一般都是使用一些表格插件来完成的.这 ...

  9. 常用表格插件附官网或中文网:

    常用表格插件附官网或中文网: Datatables.EasyUI Datagrid 数据网格.pqgrid.jqGrid.bootstrap-table 一.Datatables 中文网:http:/ ...

  10. jQuery 表格工具集

    本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分页,对表格进行滚动,拖放操作等等.这 ...

最新文章

  1. swift_025(Swift 的自动引用计数(ARC)
  2. Java 技术篇-用java自带的内存检测工具排查内存泄漏问题,查看java垃圾回收情况,监控java堆内存变化
  3. 项目启动正常,访问网页500怎么办?【思考问题要全面,小问题或许就是问题的关键,小本本记下来!!!】
  4. js实现获取当前周,过去和未来周的时间段日期
  5. php phpmailer qq邮箱,QQ邮箱利用PHPmailer发送邮件
  6. 【转】ABP源码分析四十七:ABP中的异常处理
  7. 【POJ - 3211】Washing Clothes (dp,0-1背包中点问题)
  8. mysql映射mapper_Mybatis中Mapper映射文件使用详解
  9. [转]Spring中的ContextLoaderListener使用
  10. 一文讲清如何正确选择图表,学会后再也不会用错图表
  11. 分类模型的精确率(precision)与召回率(recall)(Python)
  12. ubuntu增加磁盘容量
  13. 3ds Max2021安装步骤详解
  14. 论文阅读220403_Autonomous Driving on Curvy Roads Without Reliance on Frenet Frame: A Cartesian-Based
  15. 聊天室应用开发实践(二):实现基于 Web 的聊天室
  16. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
  17. Python异常UnicodeEncodeError: 'gbk' codec can't encode character '\uXXX' in position
  18. Fiddler简介与功能
  19. Warning: Can save best model only with val_acc available, skipping
  20. iOS 自定义字体设置与系统自带的字体

热门文章

  1. android小米手机拍照功能,小米手机 调用相机拍照后无法返回问题
  2. c++用msxml6.0解析xml
  3. laravel响应速度慢
  4. can和could的用法_can和could的区别和用法
  5. 8年Android开发教你如何写简历,详细的Android学习指南
  6. 什么是索引?索引有哪几种?什么时候使用索引比较好?
  7. 文献阅读笔记:北极气溶胶与气候
  8. word里面怎样输入空白下划线
  9. 联想计算机睡眠如何唤醒,笔记本电脑休眠和睡眠如何唤醒
  10. css设置背景色透明,字体颜色不透明