Tôi đang phát triển webapp bằng jQuery. Tôi có chức năng thêm hàng mới gồm 3 trường nhập. Sau khi tạo các phần tử DOM này, tôi muốn tập trung vào một trong các trường nhập. Tôi đang làm điều đó bằng cách gọi hàm jQuery focus() trên trường đầu vào cần thiết.jQuery focus() đôi khi không hoạt động trong IE8
Vấn đề là tập trung gọi() hoạt động tốt trong IE6 và FF3.5, nhưng không hoạt động trong IE8.
Tôi đã cố gắng làm ví dụ đơn giản về vấn đề này để hiển thị nó ở đây, nhưng với phiên bản lấy nét mã() đang hoạt động tốt. Vì vậy, tôi đoán là DOM chưa sẵn sàng khi tôi gọi focus() trong IE8. Đối với điều này tôi đã cố gắng gọi setTimeout ('myFocus()', 400). Tôi đã thành công và trong một số trường hợp, tập trung thực sự hiệu quả nhưng vẫn không phải lúc nào. Ngẫu nhiên nó không tập trung vào trường nhập của tôi.
Câu hỏi là: Có ai phải đối mặt với các vấn đề tương tự và không ai biết cách giải quyết nó? Sử dụng setTimeout cảm thấy như cách giải quyết rất xấu.
Tnx trước
được sửa đổi: 26.08.2009
Kế nhiệm để tái tạo trên ví dụ đơn giản. Đây là mã HTML + JS sao chép lỗi này trên IE8.
<html>
<head>
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function performChanged() {
formChanged = true;
}
function handleChange() {
var parentDiv = $('#container');
newValue = $(html).html();
parentDiv.html(newValue);
$(".sel1",parentDiv).bind('change',handleChange);
//alert('Uncomment this and after alert focus will be on input');
$("input.cv_values",parentDiv).focus();
}
$(document).ready(function() {
$('.trackChange').bind('change', handleChange);
});
var html = '<div class=\"div1\">\n<select class=\"sel1\" id=\"sel1\" name=\"sel1\"><option value=\"\"><\/option>\n<option value=\"11\">Select me to see problem<\/option>\n<\/select>\n\n\n<input class=\"cv_values\" id=\"sel3\" name=\"sel3\" size=\"30\" type=\"text\" value=\"\" /><br/>Focus should in input field. With alert it is but without alert focus is not there</div>';
</script>
</head>
<body>
<select class="trackChange" onchange='performChanged();'>
<option value=""></option>
<option value="1" >Select me to generate new inputs</option>
</select>
<div id="container"></div>
</body>
Để tái sản xuất: 1) chọn giá trị từ danh sách thả xuống đầu tiên. Bạn sẽ thấy đầu vào thời gian đầu tiên đang hoạt động 2) chọn giá trị từ menu thả xuống thứ hai. Bạn sẽ thấy lỗi đó được sao chép.
Sau đó, trong mã, bạn có thể nhận xét dòng nơi hiển thị cảnh báo JS(). Điều kỳ lạ là nếu có cảnh báo này() thì sau khi tiêu điểm đang hoạt động tốt.
Hy vọng điều này sẽ giúp bạn hiểu vấn đề của mình ở đâu.
P.S. Tôi cần ứng dụng của mình hoạt động theo cách này - nó đang tạo lại các đầu vào đó sau khi chọn giá trị từ menu thả xuống. Đây là ví dụ đơn giản về ứng dụng của tôi;).
đăng đoạn mã. làm mọi thứ dễ dàng hơn. – krishna
Bạn đã thử tập trung vào sự kiện "tải" của cửa sổ (không phải trên "DOMContentLoaded", a.k.a. - 'document.ready (...)' - một)? – kangax