我有大致如下的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我認爲? –