今天学习了使用JQuery实现可编辑的table 表格。把学习成果分享下。其实整个过
程很简单,没有用很多高深的函数和复杂的算法。如果对JQuery的和HTML的一些交互不
熟悉的话建议看看这篇博客《JQuery与HTML元素的获取、设置、添加、删除》
创建表格→创建文本框→将文本框放到表格的单元格→将单元格的值赋给文本框
(清除单元格)→将文本框编辑过的新值赋值给单元格。
HTML:
<span style="font-family:SimSun;font-size:24px;"><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JsEditTable.aspx.cs" Inherits="JQueryDemo.JsEditTable" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>JQuery之可以编辑的表格</title> <link href="CSS/CssEditTable.css" rel="stylesheet" /> <script src="JS/jquery.js"></script> <script src="JS/JSEditTable.js"></script> </head> <body> <form id="form1" runat="server"> <table> <thead> <tr > <th colspan ="2">鼠标点击表格可以编辑</th> </tr> </thead> <tbody > <tr > <th >学号</th> <th >姓名</th> </tr> <tr > <td>0001</td> <td>张三</td> </tr> <tr > <td >0002</td> <td >李四</td> </tr> <tr > <td >0003</td> <td >王五</td> </tr> <tr > <td>0004</td> <td>赵六</td> </tr> </tbody> </table> </form> </body> </html> </span>
CSS:
<span style="font-family:SimSun;font-size:24px;">table { /*设置body 的边框,使得页面显示出表格*/ border: 1px solid black; /*将单元格之间的空格消去*/ border-collapse:collapse ; width :400px; } table td { border:1px solid black; width :50%; } table th { border:1px solid black; width:50px; } tbody th { background-color :#808080; } </span>
JS:
<span style="font-family:SimSun;font-size:24px;">//使用JavaScript来解决奇偶行背景变色的问题 $(function(){ //找到表格中所有的奇数行 $("tbody tr:even").css("background-color", "red"); //找到表格中所有的偶数行 $("tbody tr:odd").css("background-color", "green"); //找到所有学号的单元格(奇) var numTd = $("tbody td:even"); //给单元格注册鼠标点击事件 numTd.click(function () { //找到当鼠标点击单元格时,对应的dom 对象(单元格) var tdObj = $(this); if (tdObj.children("input").length > 0) { return false; } //获取当前单元格的内容 var text = tdObj.html(); //创建一个文本框 var inputObj = $("<input type='text'>"); //去掉文本框的边框;设置文本框的文字大小和整体一样 inputObj.css("border-with", "0").css("font-size","16px") //使文本框的宽度和td的宽度相同 inputObj.width(tdObj.width()); //设置文本框的背景色 inputObj.css("background",tdObj.css("background-clor")); //需要将当前td中的内容放入到文本框中 inputObj.val(text); //清空td中的内容 tdObj.html(""); //将文本框插入到对应的td(单元格)中 inputObj.appendTo(tdObj); //文本框插入后被选中 inputObj.trigger("focus").trigger("select"); //单元格触发单击事件没有任何返回值 inputObj.click(function () { return false; }); //处理文本框上回车和Esc事件 inputObj.keydown(function (event){ //获取当前按下键盘的键值 var keycode = event.which; //处理回车事件 if (keycode ==13) { //获取当前文本框中的内容 var inputtext = inputObj.val(); //将td的内容修改成文本框中的内容 tdObj.html(inputtext); return false; } //处理esc事件 if (keycode == 27) { alert(inputObj.val()); alert(text); //将单元格的内容改变成原来的内容 tdObj.html(text); } }); }); });</span>
1.例子中实现了隔行换色的功能:用到了JQuery中的 even ()函数和odd()函
数。
Even是选出元素的奇数;Odd是选出元素的偶数。
这两个函数都是从0 开始数的,也就是说一共4个元素【0、1、2、3】,其中奇
数是第二个和第四个数。
2.此外还有一个问题,就是在按enter键确定事件。在火狐或者部分浏览器中,按
enter键是一个很特别的按键,它绑定了很多事件,在你按下enter键时,它除了响应你
设定的元素行为外,还会响应改元素父节点的enter行为。这时就要屏蔽enter键,将其
返回值写成 false 就可以很简单的解决这个问题。
3.在学习过程中,我发现源码是存在问题的,我将源码复制到VS中重新生成,在按
enter快捷键确定事件时,浏览器总是会刷新表格,就算屏蔽了enter键也不管用 ,后来
去牛腩视频中翻了翻以前的学习记录,才发现源码中的判断按键的函数是 keyup事件,
牛腩是keydowm事件,改了源码以后发现,没有错误了。其实keydown 和keyup 有很多区
别的。但是有个疑问,为什么视频中使用的也是keyup事件,但没有报错呢?不得其
解。希望知道的告诉我一下。