2009-02-14 23 views
9

Quiero asignar un controlador de eventos keydown a un iframe. Algo similar a los puros JS:Agregar controlador de eventos a un iframe usando JQuery

document.getElementById('iframe_id').contentWindow.addEventListener('keydown',funcName, true); 

me trataron:

$(document.getElementById('iframe_id').contentWindow).keydown(function() { 
    // my func 
}); 

Pero no funciona .. Por favor, ayuda!

+0

posible duplicado de [evento keydown en un marco flotante] (http://stackoverflow.com/questions/1199075/keydown-event-on-a-iframe) – paulmorriss

Respuesta

0

La función $ reemplaza la necesidad de document.getElementById

$('iframe_id').contentDocument.keydown(function() { 
    // logic 
}); 
15

contentWindow es window objeto del iframe 's. Desea que el iframe 's document lugar:

$(document.getElementById('iframe_id').contentWindow.document).keydown(function() { 
    // my func 
}); 

Tenga en cuenta que no estoy seguro de cómo jQuery reacciona a elementos de otros marcos de ventanas /.

+2

Gran ! Gracias, eso funciona! –

+1

Tenga cuidado con esto. Creo que esto causará una fuga de memoria bastante grande donde el contenido del iframe permanecerá en la memoria incluso después de cambiar su URL. –

4

Algo a tener en cuenta: esto nunca funcionará, por lo que entiendo, si el contenido del iframe es de dominio cruzado. Terminará con errores de permisos: Permiso denegado para http://... para obtener la propiedad HTMLDocument.nodeType de http://.... Los navegadores limitan los permisos dom hijos primarios al mismo dominio.

+0

Funcionará, por supuesto, si se usa dentro del mismo dominio, aún. –

0

Esto funcionó para mí:

$('#iframe_id').contents().keydown(function() { 
    // my func 
}); 
Cuestiones relacionadas