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