У меня есть текстовое поле лайтбокса, которое отображается с помощью вызова AJAX из ASP.NET UpdatePanel. Когда отображается лайтбокс, я использую метод focus()
текстового поля, находящегося в лайтбоксе, чтобы сразу же сфокусироваться на текстовом поле.
В Firefox текстовое поле получает фокус без проблем. В IE текстовое поле не получает фокус, если я не использую
setTimeout(function(){txtBx.focus()}, 500);
чтобы метод фокусировки срабатывал чуть позже, после загрузки элемента DOM, я предполагаю.
Проблема в том, что непосредственно над этой строкой я уже проверяю, является ли элемент нулевым / неопределенным, поэтому объект уже должен существовать, если он попадет в эту строку, он просто не позволит себе получить правильный фокус по какой-то причине.
Очевидно, что установка таймера для «исправления» этой проблемы - не лучший и не самый элегантный способ решения этой проблемы. Я хотел бы иметь возможность сделать что-то вроде следующего:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
Есть ли способ сказать, что текстовое поле имеет фокус, чтобы я мог сделать что-то вроде выше?
Или я смотрю на это неправильно?
Редактировать
Чтобы уточнить, я не вызываю код при загрузке страницы. Сценарий находится в верхней части страницы , однако он находится внутри функции, которая вызывается при завершении асинхронной обратной передачи ASP.NET, а не при загрузке страницы.
Поскольку это отображается после обновления Ajax, DOM уже должен быть загружен, поэтому я предполагаю, что событие jQuery $(document).ready()
здесь не поможет.