基于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 相关文章推荐
jQuery侧边栏随窗口滚动实现方法
Mar 04 Javascript
JavaScript验证电子邮箱的函数
Aug 22 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
javascript修改图片src的方法
Jan 27 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
May 12 Javascript
JS正则获取HTML元素的方法
Mar 31 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
在create-react-app中使用sass的方法示例
Oct 01 Javascript
vue中使用v-model完成组件间的通信
Aug 22 Javascript
Vue组件化开发之通用型弹出框的实现
Feb 28 Javascript
详解Vue的sync修饰符
May 15 Vue.js
JavaScript的Set数据结构详解
Feb 18 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
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
php pdo操作数据库示例
2017/03/10 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
JavaScript使用cookie
2007/02/02 Javascript
js压缩利器
2007/02/20 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python使用Tesseract库识别验证
2018/03/21 Python
python读取和保存视频文件
2018/04/16 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
档案信息化建设方案
2014/05/16 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
如何理解及使用Python闭包
2021/06/01 Python