2010-09-08 39 views
10

Tôi không có quyền truy cập trực tiếp vào nguồn của iframe này, vì vậy tôi muốn thực hiện việc này, nếu có thể theo cách này.Đính kèm sự kiện trong iframe con vào trình xử lý trong cửa sổ chính

Tôi có một iframe được tạo ra bởi JS:

<iframe name="temp_iframe" width="100%" height="95%" src="'+the_url+'"></iframe> 

Và bên trong là một nút gửi và một nút hủy. Nút gửi hoạt động tốt, nhưng tôi muốn nút hủy đóng phương thức này chứa iframe ... Tôi cũng muốn nút gửi để gửi, rồi đóng phương thức. Thông thường điều này sẽ dễ dàng, nhưng tôi không chắc chắn cách thiết lập sự kiện trong cửa sổ chính thành phần tử con con của iframe ảnh hưởng đến cha mẹ của đứa trẻ, cửa sổ chính.

Ví dụ: nếu điều này không có trong khung nội tuyến và trong jQuery:

$('[name=temp_iframe] button').live('click',function(){ 
    alert('click'); 
    return false; 
}); 

EDIT: Và ngoài ra, nó nằm trên cùng một tên miền!

+0

Nếu nguồn của iframe là tên miền khác, bạn không thể làm điều đó do hạn chế chữ viết tắt của trang web chéo. –

+0

cùng tên miền của nó ... tôi chỉ không có quyền truy cập. Tôi làm việc cho City of Portland, OR và tôi phải yêu cầu thay đổi mã phía máy chủ ... –

+0

Đề xuất thay đổi tiêu đề: ** Đính kèm sự kiện trong iframe con vào trình xử lý trong cửa sổ chính **. Từ ngữ hiện tại nghe như thể bạn muốn '.trigger()' là một sự kiện trong đứa trẻ. Sự nhầm lẫn này dẫn đến một cuộc bỏ phiếu trùng lặp không đúng về [câu hỏi sử dụng trình kích hoạt] (https://stackoverflow.com/q/27332339/673991). –

Trả lời

13

Sử dụng contents() để truy cập đối tượng Tài liệu bên trong iframe. Lưu ý rằng có những vấn đề chung với việc sử dụng một thư viện jQuery trong một tài liệu để thao tác với một tài liệu khác và nó nói chung nên tránh. Tuy nhiên, trong trường hợp các sự kiện ràng buộc nó hoạt động.

$('[name=temp_iframe]').contents().find('button').click(function() { 
    alert('click'); 
}); 

Điều này yêu cầu khung nội tuyến và nội dung của khung nội dung được tải, do đó hãy xử lý trong trình xử lý $(window).load() nếu cần. Bạn không thể live/delegate trên các tài liệu vì các sự kiện không được truyền từ tài liệu con vào phụ huynh.

+2

Hoàn hảo! cảm ơn! Tôi đặt nó trong một .load ('iframe') thay vào đó mặc dù –

0

Trong đồng bằng JavaScript nó sẽ là:

document.getElementById("frameId").contentDocument.getElementById("buttonId").click(); 

Nếu bạn cần đến các yếu tố của giá trị thuộc tính và tên thẻ tìm kiếm, bạn có thể:

document.querySelectorAll('[name=temp_iframe]')[0].contentDocument.getElementsByTagName('button')[0].click(); 
Các vấn đề liên quan