2010-05-23 15 views
40

używam biblioteki editArea i jQuery robić to, co muszę ...jquery wybierz iframe dzieci

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

więc w moim html istnieje znacznik iframe że editArea korzysta co jest mi potrzebne, aby uzyskać dostęp coś tak z jQuery

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

próbowałem powyżej, ale wygląda na to, że nie wykrywa ten klucz. ale działa, jeśli selektor był $ (dokument) , więc reszta funkcji działa, po prostu nie odbiera iframes textarea keydown

żadnych pomysłów? Dzięki

+0

chłopców Wiem, że to nie działa, ale mówię tylko o tym, że to demostracja ... ale żadna z odpowiedzi nie robi tego dla mnie. Zastanawiam się, czy narzędzie editArea zatrzymało propagację lub coś podobnego? – Val

+0

Czy element iframe wskazuje tę samą domenę, co strona nadrzędna? –

+0

tak to jest w tej samej domenie nie ma src attr '' – Val

Odpowiedz

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

Należy pamiętać, że .contents() działa tylko wtedy, gdy znajdujesz się w tej samej domenie. –

+3

Co się stanie, jeśli nie znajdujesz się w tej samej domenie? Czy ktoś może przynajmniej użyć elementu klikniętego w tym elemencie iframe, aby wywołać coś w oknie nadrzędnym? – cbmtrx

1

Musisz uzyskać dostęp do elementów iframe contentWindow.document, a nie do elementu iframe.

9

Trzeba szukać w wewnętrznej document iframe, w celu uzyskania elementu textarea:

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

Powinieneś robić

 

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

Możesz podróżować na dowolnym poziomie, Powyższe odpowiedzi są poprawne. Zrobiłem jak poniżej

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

dostępu do rodziców można użyć

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

Jeśli wszystko inne zawiedzie, skończyło się coraz wyżej do pracy przez owinięcie w tej funkcji:

$(window).blur(function() { 
    // genius code here 
}