2009-09-23 30 views
18

Tôi mở một iframe trong JavaScript:Chờ cho iframe để tải trong JavaScript

righttop.location = "timesheet_notes.php"; 

và sau đó muốn chuyển thông tin với nó:

righttop.document.notesform.ID_client.value = Client; 

Rõ ràng tuy nhiên, dòng đó sẽ không để làm việc cho đến khi trang đã được tải đầy đủ trong khung nội tuyến và phần tử biểu mẫu đó sẽ được ghi vào đó.

Vì vậy, cách tốt nhất/hiệu quả nhất để giải quyết vấn đề này là gì? Một số loại vòng lặp thời gian chờ? Lý tưởng nhất là tôi thực sự muốn giữ tất cả nó trong tập lệnh cụ thể này, thay vì phải thêm bất kỳ nội dung bổ sung nào vào trang đang được mở.

Trả lời

40

Trước hết, tôi tin rằng bạn có nghĩa vụ phải ảnh hưởng đến tài sản src của iframe, chứ không phải location. Thứ hai, móc sự kiện của iframe load để thực hiện thay đổi của bạn:

var myIframe = document.getElementById('righttop'); 
myIframe.addEventListener("load", function() { 
    this.contentWindow.document.notesform.ID_client.value = Client; 
}); 
myIframe.src = 'timesheet_notes.php'; 

Một lần nữa, đây là tất cả giả sử bạn có nghĩa là i khung, không khung.

+0

Cảm ơn Crescentfresh - đó là hoàn toàn những gì tôi đang tìm kiếm; đơn giản, thanh lịch và hoạt động tốt! :-) –

+0

Có cách nào để thực hiện việc này bằng cách đính kèm sự kiện không? Giả sử rằng iframe có thể có các trình xử lý tải trọng riêng của nó và tôi không muốn vô tình clobber chúng bằng cách gán lại thuộc tính onload. –

+1

@Eric: vâng. Sử dụng thư viện như Mootools, Prototype 1.6 hoặc jQuery. Nếu bạn không có một trong số đó, hãy sử dụng điều này: http://ejohn.org/blog/flexible-javascript-events/ –

4

Tôi đoán bạn có thể dễ dàng thực hiện việc này với jQuery ... jQuery Home Chỉ cần móc trang vào jQuery $ function() ... ví dụ:

$(document).ready(function() { 
$('iframe').load(function() { 
    // write your code here.... 
} 

Có một cái nhìn lướt qua các ví dụ tập tin tải lên ở đây: Using iframes for multiple file uploads...

+0

Tôi đã không thực sự muốn nhận được vào jquery (chưa mở cửa được nêu ra), tôi đã hy vọng chỉ để đối phó với nó trong một vài dòng thanh lịch của javascript. Nhưng dù sao thì Rajesh! –

+0

không phải là một vấn đề .. cảm ơn vì đã đăng bài như tôi đã học một vài thủ thuật mà không cần sử dụng jquery :) –

0

thử một này ...

$('iframe').each(function() { 
    $(this).ready(function() { 
     $('#result').html("ready"); 
    }); 
}); 
+6

Poster gốc chưa bao giờ đề cập đến jQuery và chưa có thẻ jQuery trong bài đăng. Tôi muốn đề nghị sau đó họ không tìm kiếm một câu trả lời jQuery. –

+1

Sử dụng sẵn sàng trên iframe sẽ không hoạt động như mong đợi, http://tinyurl.com/glybl34 – dude

Các vấn đề liên quan