You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击td显示contenteditable div时如何实现单次点击即可聚焦输入

问题解决方案

根因说明

当前需要点击两次才能定位光标的核心原因有两个:

  • 仅对div设置了显示和可编辑属性,没有主动触发聚焦动作,浏览器默认不会将焦点自动切换到新显示的元素上
  • td元素的mousedown事件默认行为会将焦点锁定在td上,会覆盖后续给div设置的聚焦状态

修改后代码

$(document).ready(function() {
    $("td").on("mousedown", function(e) {
        // 阻止td点击默认行为,避免焦点被td抢占
        e.preventDefault();
        var cellOffset = $(this).offset();
        $('#cellSelect')
            .offset({ top:cellOffset.top-1, left:cellOffset.left-1 })
            .show(0)
            .attr('contenteditable','true')
            // 主动触发可编辑div的聚焦,自动定位光标
            .focus();
    });
});

兼容优化(可选)

如果在部分浏览器中遇到空的可编辑div聚焦后光标不显示的问题,可以在focus()调用后补充以下代码手动设置光标位置:

const editableEl = $('#cellSelect')[0];
const range = document.createRange();
const selection = window.getSelection();
range.selectNodeContents(editableEl);
// 光标定位到内容起始位置,设置为false则定位到末尾
range.collapse(true);
selection.removeAllRanges();
selection.addRange(range);

内容的提问来源于stack exchange,提问作者Daniel Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:27:03