У меня есть HTML-код в следующих строках:
<div class="hiddenClass"> // this implies display:none
<span>
<input type="text" id="hiddenInput"/>
</span>
</div>
и событие Javascript (запускаемое методом "succes" при вызове jQuery $ .ajax ()), которое должно сделать этот 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