Tôi có hộp văn bản hộp đèn được hiển thị bằng cách sử dụng cuộc gọi AJAX từ ASP.NET UpdatePanel hay không. Khi hộp đèn được hiển thị, tôi sử dụng phương thức focus()
của hộp văn bản nằm trong hộp đèn để đưa tiêu điểm vào hộp văn bản ngay lập tức.Kiểm tra xem phần tử DOM có tập trung
Khi ở trong Firefox, hộp văn bản sẽ được lấy tiêu điểm mà không có vấn đề gì. Trong IE, hộp văn bản không lấy tiêu điểm trừ khi tôi sử dụng
setTimeout(function(){txtBx.focus()}, 500);
để làm cho phương pháp lấy nét cháy sau đó, sau khi phần tử DOM đã được tải tôi giả định. Vấn đề là, ngay trên dòng đó, tôi đã kiểm tra xem liệu phần tử là null/undefined, vì vậy đối tượng đã tồn tại nếu nó chạm vào dòng đó, nó sẽ không cho phép chính nó lấy tiêu điểm ngay lập tức vì một lý do nào đó.
Rõ ràng đặt hẹn giờ để "khắc phục" sự cố này không phải là cách tốt nhất hoặc thanh lịch nhất để giải quyết vấn đề này. Tôi muốn có thể thực hiện một số việc như sau:
var txtBx = document.getElementById('txtBx');
if (txtPassword != null) {
txtPassword.focus();
while (txtPassword.focus === false) {
txtPassword.focus();
}
}
Có cách nào để nói rằng hộp văn bản có tiêu điểm để tôi có thể làm điều gì đó như trên không?
Hoặc tôi đang nhìn vào điều này một cách sai lầm?
Chỉnh sửa
Để làm rõ, tôi không gọi mã khi tải trang. Kịch bản là ở đầu trang, tuy nhiên nó nằm bên trong một hàm được gọi khi postback Asynchronous của ASP.NET hoàn tất, không phải khi trang tải.
Bởi vì điều này được hiển thị sau khi cập nhật Ajax, DOM nên đã được tải, vì vậy tôi giả định rằng sự kiện $(document).ready()
của jQuery sẽ không hữu ích ở đây.
Phương pháp này có hoạt động nếu bạn setTimeout() với độ trễ là 0 không? – Aintaer
Có thể là tập lệnh đang thực thi trước khi hộp đèn + hộp văn bản được hiển thị? Làm thế nào bạn mở hộp đèn? Có thể đăng một số mã. –
Điều đó chắc chắn có thể, tôi chỉ không chắc chắn phải làm gì để giải quyết vấn đề đó. –