2013-06-13 41 views
8

Tôi có lịch và khi tôi nhấp vào <td>, cửa sổ bật lên sẽ xuất hiện để bạn có thể tạo số liệu cho ngày bạn đã chọn. Tôi muốn thêm một tính năng.Gọi JavaScript của cửa sổ mẹ từ cửa sổ con

Khi người dùng hoàn tất việc tạo sự kiện, tôi muốn gửi yêu cầu JavaScript đến trang gốc để tôi có thể làm mới lịch bằng AJAX. Về cơ bản, tôi muốn gọi một hàm từ đứa trẻ, nhưng hàm này nằm trên trang cha.

Trên Google, tôi chỉ tìm thấy tập lệnh có thể làm mới cửa sổ chính - không có gì về "gọi lại mẹ". ☹ Thậm chí có thể không?

P.S. Câu trả lời có thể là JS hoặc jQuery thuần túy, điều đó không quan trọng. Tôi sẽ tiếp tục tìm kiếm trong khi đó.

+0

@Neal David cho biết anh đã tìm kiếm những thứ như "gọi lại của cha mẹ", mà tôi nghĩ, nếu tìm kiếm của anh ấy kỹ lưỡng, là một lượng nỗ lực hợp lý. Lưu ý rằng, theo như tôi có thể nói, David không yêu cầu mã hoàn chỉnh để cập nhật và hiển thị lịch. Anh ta chỉ yêu cầu một cách tổng quát cho một cửa sổ bật lên để gọi một hàm trong cửa sổ cha của nó. –

+0

Đây là một câu hỏi rất hợp lệ đã được ném xung quanh rất nhiều, tôi không biết tại sao nó đã được downvoted. Tôi có thể tưởng tượng rằng trong các phiên bản sắp tới của các trình duyệt, chúng ta sẽ thấy javascript có thể tương tác với nền tảng cửa sổ ở mức độ sâu hơn. – OneChillDude

+0

Cảm ơn cả hai vì đã bảo vệ câu hỏi này. Tôi chỉ yêu cầu một "làm thế nào để" nhưng không cần mã ... Và có, tôi đã làm một số nghiên cứu và tất cả tôi tìm thấy là làm thế nào ti refrech cửa sổ cha mẹ. Tôi không tìm thấy gì cả. Bây giờ tôi hy vọng rằng trong tương lai, câu hỏi này có thể là tìm kiếm hàng đầu trong Google và giúp nhiều người hơn trong nhu cầu. –

Trả lời

13

Điều bạn đang tìm kiếm là tham chiếu đến window đã mở cửa sổ bật lên. Một khi bạn có điều đó, bạn có thể gọi các hàm trong cửa sổ đó, đọc và ghi các biến trong cửa sổ đó, hoặc thậm chí thao tác với DOM của nó.

Tham chiếu đó được gọi là opener. Nó cung cấp cho bạn đối tượng window cho cửa sổ đã mở cửa sổ hiện tại. Ví dụ, nếu bạn có một chức năng trong cửa sổ ban đầu như thế này:

function updateMe(data) { 
    alert(data); 
} 

sau đó trong cửa sổ popup bạn có thể gọi nó như thế này:

opener.updateMe('Hello!'); 

Đương nhiên, bạn cần phải chắc chắn rằng updateMe() là một hàm toàn cầu trong trang gốc. Hoặc nếu bạn có một số đối tượng trong trang gốc và updateMe() là một phương pháp của đối tượng đó, bạn vẫn có thể làm điều đó, miễn là đối tượng là toàn cầu. ví dụ. trong trang chủ:

var myObject = { 
    updateMe: function(data) { 
     alert(data); 
    } 
}; 

sau đó trong cửa sổ bật lên bạn có thể làm:

opener.myObject.updateMe('Hello!'); 

Về cơ bản, miễn là bạn có thể nhận được đến đối tượng hoặc chức năng trong trang gốc với window.whatever, sau đó trong bật lên, bạn chỉ cần thay đổi điều đó thành opener.whatever.

+1

[Tài liệu hướng dẫn cho 'window.opener'] của MDN (https://developer.mozilla.org/en-US/docs/Web/API/window.opener) –

+0

Cảm ơn bạn. Từ những gì tôi thấy, đây là những gì tôi đang tìm kiếm. Tôi sẽ thử nó vào ngày mai tại nơi làm việc! –

+0

Nó hoạt động như một sự quyến rũ! Cảm ơn rất nhiều, tôi đã học được điều gì đó ngày hôm nay! –

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