我有大致如下的HTML:设置显示后的输入元件上设置焦点:块
<div class="hiddenClass"> // this implies display:none
<span>
<input type="text" id="hiddenInput"/>
</span>
</div>
和Javascript事件(在jQuery的$就一个“更迭”方法触发()调用),需要使该div可见,然后将焦点置于控件上。例如:
this.DOMElements.divElement.className="showClass"; //a CSS class with display:block;
this.DOMElements.hiddenInputElement.focus();
this.DOMElements.hiddenInputElement.select();
奇怪的是,此代码仅适用于部分时间。在某些情况下(有时只有!!),focus/select命令会产生关于聚焦/选择隐形控制的警告。控件将变为可见,但焦点不会移动,也不会选择文本。
我发现(有点)的溶液通过在一个单独的函数移动聚焦/选择代码,并通过
this.DOMElements.divElement.className="showClass"; //a CSS class with display:block;
setTimeout("focusinput('hidddenInput')",1);
好了,终于我的问题的手段延迟叫它:由于JavaScript是单线程..如何在我使父div可见的时间和可以在子输入元素上设置焦点/选择的时间之间存在延迟?这怎么可能是一个竞争条件?
编辑:偏偏IE8
只发生在IE我认为? –