2010-05-23 50 views
40

Tôi đang sử dụng thư viện editArea và jquery để làm những gì tôi cần ...jquery chọn iframe trẻ em

http://www.cdolivet.com/index.php?page=editArea&sess=2b8243f679e0d472397bfa959e1d3841

như vậy trong html của tôi có được một thẻ iframe rằng editArea sử dụng những gì tôi cần là truy cập một cái gì đó như vậy với jquery

$('iframe textarea').keydown(function (e){ 
    number = 17; //any number really :) 
    if(e.which == number){ 
     //do something... 
     alert('Done...'); 
    } 
}); 

Tôi đã thử ở trên nhưng có vẻ như nó không phát hiện ra chìa khóa đó. nhưng nó hoạt động nếu bộ chọn là $ (tài liệu) do đó phần còn lại của hàm hoạt động nó chỉ là nó không chọn các iframe textarea keydown

bất kỳ ý tưởng nào? Cảm ơn

+0

trai tôi biết rằng nó không hoạt động nhưng tôi chỉ đặt nó như là một sự hủy diệt ... nhưng không có câu trả lời nào làm việc đó cho tôi. Tôi tự hỏi liệu editArea có dừng quá trình tuyên truyền hay loại gì đó thuộc loại đó không? – Val

+0

Khung nội tuyến có trỏ đến cùng một miền với trang gốc không? –

+0

vâng, nó nằm trên cùng một tên miền không có src attr '' – Val

Trả lời

60
$("iframe").contents().find("textarea").keydown(...) 
+9

Nên lưu ý rằng .contents() chỉ hoạt động nếu bạn ở trên cùng một tên miền –

+3

Điều gì xảy ra nếu một miền không nằm trên cùng một tên miền? Một người vẫn có thể sử dụng ít nhất một yếu tố được nhấp vào trong khung nội tuyến đó để kích hoạt nội dung nào đó trong cửa sổ chính không? – cbmtrx

1

Bạn cần truy cập iframe contentWindow.document, chứ không phải chính iframe.

9

Bạn cần tìm kiếm trong khu vực nội document của iframe, để có được textarea yếu tố:

var textarea = $('textarea', $('iframe').get(0).contentWindow.document); 
textarea.keydown(function (e){ 
    var number = 17; 
    var code = (e.keyCode ? e.keyCode : e.which); 

    if(code == number){ 
     //do something... 
     alert('Done...'); 
    } 
}); 
0

Bạn nên làm

 

iframeDoc = document.getElementById('resultsFrame').contentWindow; 
// result frame is id of iframe 
$(iframeDoc).keydown(function(e)) 
{ 
// your functionality here 
} 
 
2

Bạn có thể đi bất kỳ cấp độ nào, Câu trả lời ở trên là chính xác. Tôi đã làm như sau

var iframeMain = $("#iframe0").contents().find('#iframeMain'); 
var detailsForm = $(iframeMain).contents().find('#detailsform'); 

cho cha mẹ tiếp cận bạn có thể sử dụng

window.parent.parent. // upto any level 
0

Nếu vẫn thất bại, tôi đã kết thúc nhận được ở trên để làm việc bằng cách gói trong hàm này:

$(window).blur(function() { 
    // genius code here 
} 
Các vấn đề liên quan