需求描述:在一段文字处双击可以进行修改,也就是双击后创建输入框,输入内容,在输入框失去焦点后将输入的内容再以文字的形式显示出来,以下是html代码:

1 <fieldset>
2 <legend>双击用户名进行编辑</legend>
3 <dl>
4 <dt>你的用户名:</dt>
5 <dd ondblclick="ShowElement(this)">诸葛亮</dd>
6 </dl>
7 </fieldset>

以下是摘录的JavaScript代码:

 1 <script type="text/javascript">
2 function ShowElement(element) {
3 var oldhtml = element.innerHTML;
4 //创建新的input元素
5 var newobj = document.createElement('input');
6 //为新增元素添加类型
7 newobj.type = 'text';
8 //为新增元素添加value值
9 newobj.value = oldhtml;
10 //为新增元素添加光标离开事件
11 newobj.onblur = function() {
12 element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
13 //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
14 }
15 //设置该标签的子节点为空
16 element.innerHTML = '';
17 //添加该标签的子节点,input对象
18 element.appendChild(newobj);
19 //设置选择文本的内容或设置光标位置(两个参数:start,end;start为开始位置,end为结束位置;如果开始位置和结束位置相同则就是光标位置)
20 newobj.setSelectionRange(0, oldhtml.length);
21 //设置获得光标
22 newobj.focus();
23
24 }
25 </script>

这里存在一个小问题,就是当已经双击一次的情况下,input已存在,再次双击,会出现input的内容被替换为上次双击的input的html代码。

解决方案是判断是否已存在input标签,如果存在,直接return,不做任何操作。

以下是修改后的Js代码:

 1 <script type="text/javascript">
2 function ShowElement(element) {
3 var oldhtml = element.innerHTML;
4 //如果已经双击过,内容已经存在input,不做任何操作
5 if(oldhtml.indexOf('type="text"') > 0){
6 return;
7 }
8 //创建新的input元素
9 var newobj = document.createElement('input');
10 //为新增元素添加类型
11 newobj.type = 'text';
12 //为新增元素添加value值
13 newobj.value = oldhtml;
14 //为新增元素添加光标离开事件
15 newobj.onblur = function() {
16 element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
17 //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值
18 }
19 //设置该标签的子节点为空
20 element.innerHTML = '';
21 //添加该标签的子节点,input对象
22 element.appendChild(newobj);
23 //设置选择文本的内容或设置光标位置(两个参数:start,end;start为开始位置,end为结束位置;如果开始位置和结束位置相同则就是光标位置)
24 newobj.setSelectionRange(0, oldhtml.length);
25 //设置获得光标
26 newobj.focus();
27
28 }
29 </script>

JS实现双击编辑可修改的更多相关文章

  1. JS实现双击内容变为可编辑状态

    在一些网站上我们经常看到交互性很强的功能.一些用户资料可以直接双击出现文本框,并在此输入新的资料即可修改,无需再按确定按钮等.. 我在网上查了很多资料,但都有一个小bug,就是当获取焦点后,光标的位置 ...

  2. JQUERY、AJAX双击DIV,直接修改DIV内的内容

    最近在做后台功能开发的时候,用到对排序字段的修改,感觉只为了修改一个排序值,而要重新进入编辑页比较麻烦,于是自己动手写…… 最近在做后台功能开发的时候,用到对排序字段的修改,感觉只为了修改一个排序值, ...

  3. 如何禁用 FastAdmin 双击编辑功能?

    如何禁用 FastAdmin 双击编辑功能? 新版 (1.0.0.20180513_beta)增加一个新功能,可以禁止双击编辑. 很多人还是喜欢双击选中复制,默认的双击编辑还是不怎么习惯. 可以以下文 ...

  4. 基于svg.js实现可编辑的图像

    svg.js的git地址https://github.com/svgdotjs/svg.js 实现可以拖动,可双击编辑,可拖动改变长短,线条可旋转以及一个可点击改变大小,可更改内容的二维码. 首先引入 ...

  5. 零基础学习java------35---------删除一个商品案例,删除多个商品,编辑(修改商品信息),校验用户名是否已经注册(ajax)

    一. 删除一个商品案例 将要操作的表格 思路图  前端代码 <%@ page language="java" contentType="text/html; cha ...

  6. ArcGIS学习记录—属性表的编辑与修改

    原文地址: ArcGIS问题:属性表的编辑与修改 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.com/blog/static/344933882009 ...

  7. js实现class样式的修改、添加及删除的方法

    本文实例讲述了js实现class样式的修改.添加及删除的方法.分享给大家供大家参考.具体分析如下: 比较常见的js前端功能,通过修改标签的className实现相应的功能. 具体代码如下: <t ...

  8. js实现双击后网页自己主动跑-------Day55

    公司的界面设计环节总算是告一段落了,必需要承认的是,这段时间晚间的学习带给我非常多益处.在工作中偶尔的应用,效果出奇的好,收到领导和同事的一些小赞扬,表示非常欣慰,也长了点不少自信,尽管不理解,他们这 ...

  9. JS和Jquery获取和修改label的值的示例代码

    abel标签在JS和Jquery中使用不能像其他标签一样用value获取它的值,下面有个不错的示例,希望大家可以学习下 来源:  <  JS和Jquery获取和修改label的值的示例代码  & ...

随机推荐

  1. windows下上传shell脚本不能运行—将dos模式修改为unix 文件格式

    windows下上传shell脚本至linux,其格式将为dos.dos模式的shell脚本将不能再linux下正确运行,需要修改文件模式为unix. 1 查看文件模式方法 linux服务器上,用vi ...

  2. 搭建docker registry (htpasswd 认证)

    1,拉取docker registry 镜像 docker pull registry 2,创建证书存放目录 mkdir -p /home/registry 3,生成CA证书Edit your /et ...

  3. JS高级. 03 混入式继承/原型继承/经典继承、拓展内置对象、原型链、创建函数的方式、arguments、eval、静态成员、实例成员、instanceof/是否在同一个原型链

    继承:当前对象没有的属性和方法,别人有,拿来给自己用,就是继承 1 混入式继承 var I={ }; var obj = { name: 'jack', age:18, sayGoodbye : fu ...

  4. weex踩坑记录

    weex框架样式问题--我暂时使用最基本的样式css,weex前端开发的话web端会显示各种的html标签.写出的样式也都会显示的很好,但是在app端的话,就没有很好的兼容性,只是支持文档中的一些标签 ...

  5. Asp.net 自定义CustomerSession 存放到Redis中

    首先,引用 Redis 操作驱动组件:StackExchange.Redis.dll. 继承SessionStateStoreProviderBase 类, 实现方法: using System; u ...

  6. C#正则表达式Regex类的使用

    C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间所在DLL基本上在所有的项目模板中 ...

  7. [转]ThinkPHP5 隐藏index.php问题

    ThinkPHP5 隐藏index.php问题 Apache,修改.htaccess文件 ----------------------------------------------------- R ...

  8. [转]JavaScript中的匿名函数及函数的闭包

    JavaScript中的匿名函数及函数的闭包  原文地址:http://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵 ...

  9. Python栈的学习资料

    持续更新... 1. 基础 Python for Everybody的视频课程,称得上深入浅出 https://www.py4e.com/ 2. 进阶 偏重实践应用,快速上手,稀饭~ https:// ...

  10. 析构函数的调用与return语句

    老师在课堂上讲到了return语句在执行时会自动调用对象的析构函数.我编写了下述代码测试发现整个程序析构函数调用次数与构造函数不等,这样难道不会产生内存泄漏吗? 源代码如下: #include < ...