代码之家  ›  专栏  ›  技术社区  ›  Staale

将输入字段添加到DOM并在IE中对其进行聚焦

  •  0
  • Staale  · 技术社区  · 16 年前

    我正在尝试创建一个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中焦点功能有限制吗?我需要将输入放在表单中吗?

    3 回复  |  直到 13 年前
        1
  •  4
  •   17 of 26    16 年前

    我猜IE在调用focus()时还没有更新DOM。有时浏览器会等到脚本完成执行后再更新DOM。

    我会尝试做更新,然后做

    setTimeout("setFocus", 0);
    
    function setFocus()
    {
        editElement.focus();
    }
    

    您的另一个选择是让这两个项始终存在于DOM中,并交换样式。根据您在给定时间需要隐藏/显示的内容,在它们上显示。

        2
  •  0
  •   x0n    16 年前

    什么版本的IE?你的doctype设置为什么?它是严格的、标准的还是怪癖的模式?是否出现任何javascript错误(检查左下角的状态栏中是否有黄色警告标志)?通过“工具”>“选项”>“高级”为所有错误启用错误通知。

    莪相

        3
  •  0
  •   Community CDub    8 年前

    问题已由回答 17 of 26 . 我想指出的是,这个原型有自己的机制: Function.defer()