基于JQuery制作可编辑的表格特效


Posted in Javascript onDecember 23, 2014

最近做了个项目,其中项目要求:点击表格后可直接编辑,回车或鼠标点击页面其他地方后编辑生效,按Esc可取消编辑

2个小伙伴给出了2中解决方案,大家来看看哪种更合适呢?

第一种单击表格可以编辑的方法

//相当于在页面中的 body标签加上onload事件

$(function() {

    //找到所有的td节点

    var tds = $("td");

    //给所有的td添加点击事件

    tds.click(function() {

        //获得当前点击的对象

        var td = $(this);

        //取出当前td的文本内容保存起来

        var oldText = td.text();

        //建立一个文本框,设置文本框的值为保存的值

        var input = $("<input type='text' value='" + oldText + "'/>");

        //将当前td对象内容设置为input

        td.html(input);

        //设置文本框的点击事件失效

        input.click(function() {

            return false;

        });

        //设置文本框的样式

        input.css("border-width", "0");

        input.css("font-size", "16px");

        input.css("text-align", "center");

        //设置文本框宽度等于td的宽度

        input.width(td.width());

        //当文本框得到焦点时触发全选事件

        input.trigger("focus").trigger("select");

        //当文本框失去焦点时重新变为文本

        input.blur(function() {

            var input_blur = $(this);

            //保存当前文本框的内容

            var newText = input_blur.val();

            td.html(newText);

        });

        //响应键盘事件

        input.keyup(function(event) {

            // 获取键值

            var keyEvent = event || window.event;

            var key = keyEvent.keyCode;

            //获得当前对象

            var input_blur = $(this);

            switch (key)

                    {

                case 13://按下回车键,保存当前文本框的内容

                    var newText = input_blur.val();

                    td.html(newText);

                    break;

                case 27://按下 esc键,取消修改,把文本框变成文本

                    td.html(oldText);

                    break;

            }

        });

    });

});

第二种单击表格可以编辑的方法

$(document).ready(function(){

    var tds = $("td");

    tds.click(tdClick);

});

function tdClick(){

    var tdnode = $(this);

    var tdtext = tdnode.text();

    tdnode.html("");

    var input = $("<input>");

    input.val(tdtext); //    input.attr("value",tdtext);

    input.keyup(function(event){

        var myEvent = event || window.event;

        var keyCode = myEvent.keyCode;

        if(keyCode == 13){

            var inputnode = $(this);

            var inputtext = inputnode.val();

            var td = inputnode.parent();

            td.html(inputtext);

            td.click(tdClick);

        }

        if(keyCode == 27){  //判断是否按下ESC键

            $(this).parent().html(tdtext);

            $(this).parent().click(tdClick);

        }

    });

    tdnode.append(input);

    tdnode.children("input").trigger("select");

    //输入框失去焦点,所执行的方法

    input.blur(function(){

        tdnode.html($(this).val());

        tdnode.click(tdClick);

    });

    tdnode.unbind("click");

}

想比较来说,个人更喜欢第二种一些,小伙伴们是什么意见呢,欢迎留言给我。

Javascript 相关文章推荐
JavaScript实现动态增加文件域表单
Feb 12 Javascript
jquery构造器的实现代码小结
May 16 Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 jQuery
vuex实现的简单购物车功能示例
Feb 13 Javascript
vue.js中ref及$refs的使用方法解析
Oct 08 Javascript
Vue实现购物车基本功能
Nov 08 Javascript
JavaScript调试工具汇总
Dec 23 #Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 #Javascript
jQuery元素选择器用法实例
Dec 23 #Javascript
jquery制作漂亮的弹出层提示消息特效
Dec 23 #Javascript
使用jQuery仿苹果官网焦点图特效
Dec 23 #Javascript
jQuery分组选择器用法实例
Dec 23 #Javascript
常用的JS验证和函数汇总
Dec 23 #Javascript
You might like
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php创建无限级树型菜单
2015/11/05 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python中index()和seek()的用法(详解)
2017/04/27 Python
python获取代理IP的实例分享
2018/05/07 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
python批量图片处理简单示例
2019/08/06 Python
python3 深浅copy对比详解
2019/08/12 Python
Django REST 异常处理详解
2020/07/15 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
机械工程系毕业生求职信
2013/09/27 职场文书
物业管理个人自我评价
2013/11/08 职场文书
大学生个人推荐信范文
2013/11/25 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
个人廉政承诺书
2015/04/28 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书