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

本文介绍了一种使用JavaScript实现的双击编辑功能,通过简单的代码实现了网页内容的双击即编辑特性,同时解决了光标定位的问题,提高了用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


在一些网站上我们经常看到交互性很强的功能。一些用户资料可以直接双击出现文本框,并在此输入新的资料即可修改,无需再按确定按钮等。。
我在网上查了很多资料,但都有一个小bug,就是当获取焦点后,光标的位置在文本框内容是开始处,这样编辑时还需要用户再重新选择一下光标位置,这样的交互感觉不好;后来查到新的资料解决了此问题,希望可以帮助到更多的人。

代码部分:

注意:设置选择文本的内容或设置光标位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JS实现双击编辑可修改状态</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/javascript">
    function ShowElement(element) {
        var oldhtml = element.innerHTML;
        //创建新的input元素
        var newobj = document.createElement('input');
        //为新增元素添加类型
        newobj.type = 'text';
        //为新增元素添加value值
        newobj.value = oldhtml;
        //为新增元素添加光标离开事件
        newobj.onblur = function() {
            //当触发时判断新增元素值是否为空,为空则不修改,并返回原有值 
            element.innerHTML = this.value == oldhtml ? oldhtml : this.value;
            //当触发时设置父节点的双击事件为ShowElement
            element.setAttribute("ondblclick", "ShowElement(this);");
        }
        //设置该标签的子节点为空
        element.innerHTML = '';
        //添加该标签的子节点,input对象
        element.appendChild(newobj);
        //设置选择文本的内容或设置光标位置(两个参数:start,end;start为开始位置,end为结束位置;如果开始位置和结束位置相同则就是光标位置)
        newobj.setSelectionRange(0, oldhtml.length);
        //设置获得光标
        newobj.focus();

        //设置父节点的双击事件为空
        newobj.parentNode.setAttribute("ondblclick", "");

    }
</script>
</head>
<body>
    <dl>
        <dt>你的用户名:</dt>
        <dd ondblclick="ShowElement(this)">三人行</dd>
        <dt>你的个性档</dt>
        <dd ondblclick="ShowElement(this)">三人行,必有我师焉!</dd>
    </dl>
</body>
</html>

双击事件:ondblclick

JavaScript中,实现表格单元格(td或th)的双击事件以使其变为可编辑状态通常涉及到以下几个步骤: 1. 首先,你需要获取到表格元素,并给每个单元格添加点击事件监听器。这可以通过`addEventListener('click', function)`来完成。 ```javascript const table = document.getElementById('your-table-id'); table.addEventListener('click', cellClickHandler); ``` 2. 创建`cellClickHandler`函数,检查是否进行了双击操作。你可以通过计算两次点击的时间间隔来判断。如果时间间隔小于一定阈值(比如400毫秒),则认为是双击。 ```javascript let isDblClick = false; function cellClickHandler(event) { if (isDblClick) { // 单元格已变为可编辑状态,处理编辑逻辑 editCell(event.target); } else { const timeSinceLastClick = new Date() - lastClickTime; // 假设lastClickTime保存了上一次点击的时间 if (timeSinceLastClick < 400) { isDblClick = true; lastClickTime = new Date(); } else { isDblClick = false; } } } ``` 3. 当单元格变为可编辑状态时,你可以添加相应的UI变化,如改变背景色、启用输入等,并绑定编辑完成后恢复原状的逻辑。 4. 编辑完成后,记得清除`isDblClick`标志,以便于下一次双击时继续触发同样的过程。 ```javascript function editCell(cell) { cell.contentEditable = true; cell.classList.add('editable'); lastEditTime = new Date(); // 更新最近编辑时间 // 添加失去焦点事件处理,编辑结束后取消内容编辑 cell.addEventListener('blur', () => { cell.contentEditable = false; cell.classList.remove('editable'); }); } // 初始化上一次点击时间 lastClickTime = new Date(); ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值