javascript - .focus() 不关注新元素

标签 javascript html

我有一个重命名某些 div 的函数。我试图让它工作的方式是这样的:

  • 用户右键点击div
  • 用户点击上下文菜单中的“重命名”
  • div 获取输入元素并自动聚焦
  • 输入在按下回车键或点击屏幕后提交

我已完成大部分步骤,但在我单击“重命名”后输入元素未获得焦点。这是代码:

function Rename( ){
    ClickedFile.innerHTML = "<input class='Rename' type='text' value='" + ClickedFile.innerHTML + "'>";
    ClickedFile.childNodes[0].focus();
}

ClickedFile 是被右键单击的节点。更改 innerHTML 工作正常但 .focus() 没有,我不确定为什么。我也没有在控制台上收到任何错误。

我也尝试过使用:

ClickedFile.childNodes[0].select();
ClickedFile.childNodes[1].focus();
ClickedFile.focus();

他们都没有工作。

编辑:

  • 我知道使用 JQuery 可能会有帮助,但我更感兴趣的是找出它不起作用的原因。

  • 我解决了这个问题。它与事件处理程序有关。我的答案贴在下面。

最佳答案

您必须将元素添加为 DOM 的一部分

var input = document.createElement("input");
input.className = "Rename";
input.type = "text";

document.getElementById("somenode").appendChild(input);
input.focus(); // should work now

参见 the fiddle

关于javascript - .focus() 不关注新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16531475/

相关文章:

javascript - 我的 Date() JavaScript 函数不起作用?

Javascript 通过事件动态创建元素

html - 我需要一个解决方案来处理 CSS3 中元素的 id 内的两个选择器

c# - 如何从c#中的字符串中删除html标签

javascript - php 按位异或 和 js 按位异或产生不同的结果

javascript - 如果多个跨度有不同的值,则显示警报

javascript - for循环中的延迟lineTo

javascript - Chrome 中的 CSS#/HTML5 嵌套表格和子填充

javascript - 使用javascript模拟粘贴到Textarea

html - div,不触发水平滚动