一样的table?不一样的table(可编辑状态table)


Posted in Javascript onSeptember 19, 2012

新的一天开始了,生活还要继续,今天要和大家分享的是不一样的table,普通的table就用于显示数据,今天要分享的table不仅仅能显示数据,还可以对数据进行编辑,当鼠标点击数据时相应的数据格就变成可编辑的状态,废话不多说,进入今天的主题,首先完成HTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>JQueryProject1</title> 
<meta name="author" content="Frank_Ren" /> 
<link type="text/css" rel="stylesheet" href="css/myCSS.css" /> 
<script type="text/javascript" src="js/jquery-1.8.1.min.js"></script> 
<script type="text/javascript" language="JavaScript" src="js/myJSFile.js"></script> 
<!-- Date: 2012-09-17 --> 
</head> 
<body> 
<table> 
<thead> 
<tr> 
<th colspan="2">鼠标点击下列内容可以进行编辑</th> 
</tr> 
</thead> 
<tbody id="content"> 
<tr> 
<th>学号</th> 
<th>姓名</th> 
</tr> 
<tr> 
<td>000001</td> 
<td>张三</td> 
</tr> 
<tr> 
<td>000002</td> 
<td>李四</td> 
</tr> 
<tr> 
<td>000003</td> 
<td>王五</td> 
</tr> 
<tr> 
<td>000004</td> 
<td>赵六</td> 
</tr> 
</tbody> 
</table> 
</body> 
</html>

没错现在它还是一个普通的table,一点样式都还没有,为了让这个table显得不那么抽象,接下来为它引入CSS样式
table{ 
width:400px; 
height: 150px; 
} 
table, table td, table th{ 
border:1px solid black; 
border-collapse: collapse; 
} 
table td{ 
width:50%; 
height: 25px; 
} 
thead th{ 
background-color:#87CEFA; 
} 
tbody th{ 
background-color:#FFFACD; 
}

在HTML页面中可编辑的页面元素就只有那么几个,很不幸table并不是其中一个,为了让table变得可编辑,就要向table中插入可编辑的页面元素,再用CSS装饰一下,让它看起来还是一个普通的table,然而却具备了可编辑的功能,这就是JS所要完成的功能,JS代码如下:
$(function(){ 
var content; 
$("#content tr:odd").css("background-color","#D2B48C"); 
$("#content tr:even").css("background-color","#C0C0C0"); 
$("#content td").click(function(){ 
var clickObj = $(this); 
content = clickObj.html(); 
changeToEdit(clickObj); 
}); 
function changeToEdit(node){ 
node.html(""); 
var inputObj = $("<input type='text'/>"); 
inputObj.css("border","0").css("background-color",node.css("background-color")) 
.css("font-size",node.css("font-size")).css("height","20px") 
.css("width",node.css("width")).val(content).appendTo(node) 
.get(0).select(); 
inputObj.click(function(){ 
return false; 
}).keyup(function(event){ 
var keyvalue = event.which; 
if(keyvalue==13){ 
node.html(node.children("input").val()); 
} 
if(keyvalue==27){ 
node.html(content); 
} 
}).blur(function(){ 
if(node.children("input").val()!=content){ 
if(confirm("是否保存修改的内容?","Yes","No")){ 
node.html(node.children("input").val()); 
}else{ 
node.html(content); 
} 
}else{ 
node.html(content); 
} 
}); 
} 
});

接下来对这段JS做简单的分析,全局变量 var content 用于保存编辑之前表格中的内容,有时候用户对表格进行编辑了但却并不想保存编辑后的结果,就需要将表格中的内容还原到编辑之前,所以当鼠标点击的时候首先要将表格的内容保存起来。

下面这两句$("#content tr:odd").css("background-color","#D2B48C"); $("#content tr:even").css("background-color","#C0C0C0"); 是让table具备隔行变色,只是为了增加表格的可视性。var inputObj = $("<input type='text'/>"); 这一句生成一个可编辑的JQuery对象,也就是要插入表格中的可编辑元素,后面那一串.css()方法是给inputObj对象追加CSS样式,.css()方法不仅可以给某个对象设置CSS样式还可以获取某个对象的CSS样式,JQuery中提供了很多这样的方法。很多时候JQuery方法执行过后返回回来的还是JQuery对象,所以就出现了inputObj.css().css().css()....这样的写法。

appendTo()方法就实现了表格的可编辑性(也可用appendix()),将可编辑元素插入到表格中。.get(0).select()这两个方法是为了选中inputObj中的内容让焦点落在可编辑元素上,需要注意的是这两个方法一定要写在appendTo()之后,inputObj.click(function(){})这个方法也是必不可少的,删掉这个方法会有一个很有趣的bug,大家可以试一试。

紧接着的 keyup(function(event){}),可以通过 event.which 的方式获取键盘按下的键所对应的键值,常用的键值有 Enter键:13、Esc键:27,当用户按下Enter键时,就保存编辑后的内容,并将表格还原成普通表格,当用户按下Esc键时,将表格中的内容还原,也将表格还原成普通表格。

用户体验,苹果的出现让这个词更深入人心,这里也凑下热闹。为了提高用户体验这里增加了blur(function(){})方法,当焦点离开可编辑元素时首先判断表格中的内容是否被改变,如果没有改变直接将表格及表格中的还原,如果有改变就提示用户是否保存。

今天的示例基本完工了,如果你将JS代码放在一个单独的JS文件中引用,可能会出现一个中文乱码的bug,不妨动手试一试。谢谢你耐心的读完本文,希望对你会有所帮助。

Javascript 相关文章推荐
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
Nov 14 Javascript
关于js new Date() 出现NaN 的分析
Oct 23 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
Angular路由ui-router配置详解
Aug 01 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
JavaScript实现串行请求的示例代码
Sep 14 Javascript
jQuery学习笔记 获取jQuery对象
Sep 19 #Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 #Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 #Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 #Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 #Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
Sep 19 #Javascript
dotopAlert 提示用户需安装播放器的代码
Sep 17 #Javascript
You might like
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
js面向对象的写法
2016/02/19 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
纯JS实现轮播图
2017/02/22 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
element中table高度自适应的实现
2020/10/21 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python实现粒子群算法
2020/10/15 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
交通安全演讲稿
2014/01/07 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
毕业酒会致辞
2015/07/29 职场文书
世界十大狙击步枪排行榜
2022/03/20 杂记