2010-05-23 22 views
40

estoy usando la biblioteca EditArea y jQuery para hacer lo que necesito ...jquery seleccione iframe niños

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

así que en mi html hay una etiqueta iframe que EditArea utiliza lo que necesito es tener acceso a algo así como con jquery

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

He intentado lo anterior, pero parece que no está detectando esa clave. pero funciona si el selector era $ (documento) por lo tanto, el resto de la función funciona, simplemente no está recogiendo iframes textarea keydown

¿Alguna idea? Gracias

+0

chicos Sé que no funciona, pero solo lo puse como una demostración ... pero ninguna de las respuestas lo está haciendo por mí. Me pregunto si editArea ha detenido la propagación o algo por el estilo. – Val

+0

¿El iframe apunta al mismo dominio que la página principal? –

+0

sí, está en el mismo dominio, no tiene src attr '' – Val

Respuesta

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

Debe tener en cuenta que .contents() solo funciona si se encuentra en el mismo dominio –

+3

¿Qué sucede si uno no está en el mismo dominio? ¿Al menos uno puede usar un elemento que hizo clic en ese iframe para activar algo en la ventana principal? – cbmtrx

1

necesita acceder a los marcos flotantes contentWindow.document, no el iframe en sí.

9

Es necesario buscar en el interior document del marco flotante, con el fin de obtener el elemento 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

Deberías estar haciendo

 

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

Puede viajar a cualquier nivel, las respuestas anteriores son correctas. Hice lo que a continuación

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

para los padres el acceso puede utilizar

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

Si todo lo demás falla, que terminó siendo lo anterior para trabajar envolviendo en esta función:

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