2010-01-11 29 views
5

Có một trình đơn cây trong ứng dụng của tôi và khi nhấp vào các mục menu, nó sẽ tải một url trong iFrame. Tôi muốn đặt trọng tâm vào phần tử của trang được tải trong iFrame.Đặt tiêu điểm thành iFrame trong IE

Tôi đang sử dụng mã này, và nó hoạt động hoàn hảo trong tất cả các trình duyệt trừ IE:

var myIFrame = $("#iframeName"); 
myIFrame.focus(); 
myIFrame.contents().find('#inputName').focus(); 

Tôi đã thử tất cả các tùy chọn khác nhau như sử dụng setTimeout, nhưng không có cơ hội.

Sau khi tải trang, khi tôi nhấn phím tab, nó sẽ chuyển đến đầu vào thứ hai, có nghĩa là nó đã được nhập vào đầu tiên, nhưng nó không hiển thị con trỏ!

Tôi đang sử dụng ExtJS và plugin ManagedIFrame.

Mọi trợ giúp đều được đánh giá cao.

+0

là URL iFrame từ một tên miền khác với cửa sổ chính? Có mối quan tâm về miền bảo mật với điều đó và IE hoạt động hơi khác một chút. Ngoài ra, mã này có được bao bọc để chạy trên tài liệu đã sẵn sàng hay chỉ trong trang? –

+0

Nó tải trang từ cùng một tên miền. Có, mã được bao bọc bên trong tài liệu sẵn sàng. Nó thực sự hoạt động trên FireFox, Safari và Chrome, chứ không phải trên IE. –

Trả lời

3

iFrame có thể hiển thị khi tải hoặc hiển thị sau không? Các phần tử được tạo theo thứ tự khác nhau, là cơ sở của phương pháp setTimeout. Bạn đã thử thời gian chờ đợi có giá trị cao trên thời gian chờ đã đặt chưa?

Hãy thử một cái gì đó như ít nhất một nửa thứ hai để kiểm tra ... IE có xu hướng làm những điều theo một thứ tự khác nhau, do đó, một thời gian chờ cao có thể cần thiết để có được nó không phải để bắn cho đến khi render/sơn hoàn thiện:

$(function(){ 
    setTimeout(function() { 
    var myIFrame = $("#iframeName"); 
    myIFrame.focus(); 
    myIFrame.contents().find('#inputName').focus(); 
    }, 500); 
}); 
+0

Vâng, tôi thậm chí đã thử nó với 1000 trước đây. Một điều nữa có thể hữu ích, nó hiển thị con trỏ một lúc và con trỏ biến mất ngay lập tức! Như tôi đã nói trong câu hỏi, sau khi tôi nhấn tab, nó sẽ chuyển đến hộp nhập tiếp theo. Nó chỉ không hiển thị con trỏ. Ngoài ra, khung nội tuyến hiển thị khi tải, nhưng đặt src sau, mỗi lần người dùng nhấp vào một mục menu. –

+0

Bạn có tập trung mỗi lần iframe src thay đổi không? –

+0

Có, tôi. Nó đặt tiêu điểm ngay sau khi sự kiện được nạp tài liệu mỗi lần. –

4

Bạn cần gọi phương thức focus() đối tượng window của khung nội tuyến, không phải là phần tử iframe. Tôi không có chuyên gia trong jQuery hoặc ExtJS, vì vậy ví dụ của tôi dưới đây không sử dụng.

function focusIframe(iframeEl) { 
    if (iframeEl.contentWindow) { 
     iframeEl.contentWindow.focus(); 
    } else if (iframeEl.contentDocument && iframeEl.contentDocument.documentElement) { 
     // For old versions of Safari 
     iframeEl.contentDocument.documentElement.focus(); 
    } 
} 
+3

Tôi đã thử nó và nó không hoạt động. –

1

Khó khắc phục sự cố mà không làm ví dụ, nhưng bạn có thể thử ẩn và hiển thị đầu vào, để buộc IE vẽ lại phần tử.

Cái gì như:

var myIFrame = $("#iframeName"); 
myIFrame.focus(); 
myIFrame.contents().find('#inputName').hide(); 
var x = 1; 
myIFrame.contents().find('#inputName').show().focus(); 

này có thể Jolt IE vào hiển thị con trỏ.

0

tôi có thể nhận được IE để tập trung một lĩnh vực đầu vào trong một khung nội tuyến với:

iframe.focus(); 
var input = iframe... 
input.focus(); 
iframe.contentWindow.document.body.focus(); 
input.focus(); 
Các vấn đề liên quan