将输入字段添加到dom并将其集中在IE中

时间:2020-03-06 14:26:03  来源:igfitidea点击:

我正在尝试制作一个div,当我们单击它时它会变成一个输入框,并对其进行聚焦。我正在使用原型来实现这一目标。该功能在Chrome和Firefox中均有效,但在IE中则无效。 IE拒绝关注新添加的输入字段,即使我将超时设置为1秒也是如此。

基本上,代码是这样的:

var viewElement = new Element("div").update("text");
var editElement = new Element("input", {"type":"text"});
root.update(viewElement);

// pseudo shortcut for the sake of information:
viewElementOnClick = function(event) {
    root.update(editElement);
    editElement.focus();
}

上面的示例是实际代码的简化版本,除了IE中的焦点位以外,实际代码都可以正常工作。

IE中的焦点功能是否有限制?我需要将输入内容放在表格中吗?

解决方案

什么版本的IE?DocType设置为什么?是严格的,标准的还是怪异的模式?是否出现任何JavaScript错误(请检查状态栏左下方的黄色警告标志)?通过"工具">"选项">"高级"启用对所有错误宣布的错误。

爱信

我的猜测是,当我们调用focus()时,IE尚未更新DOM。有时,浏览器会等到脚本执行完毕后再更新DOM。

我会尝试进行更新,然后再进行

setTimeout("setFocus", 0);

function setFocus()
{
    editElement.focus();
}

另一个选择是始终将两个项目都显示在DOM中,而只是交换style.display即可,具体取决于我们需要在特定时间隐藏/显示的内容。

这个问题已经由26个问题中的17个得到了回答。我只想指出,Prototype为此具有本地机制:Function.defer()