2009-02-14 11 views
9

Je souhaite affecter un gestionnaire d'événements de gestion des touches à une iframe. Quelque chose de semblable à la JS pur:Ajout d'un gestionnaire d'événements à une iframe à l'aide de JQuery

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

J'ai essayé:

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

Mais cela ne fonctionne pas .. S'il vous plaît aider!

+0

double possible de [événement keydown sur un iframe] (http://stackoverflow.com/questions/1199075/keydown-event-on-a-iframe) – paulmorriss

Répondre

0

La fonction $ remplace la nécessité de document.getElementById

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

contentWindow est l'objet de windowiframe. Vous voulez document du iframe à la place:

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

Notez que je ne suis pas sûr de savoir comment jQuery réagit à des éléments d'autres fenêtres/cadres.

+2

Grande ! Merci, ça marche! –

+1

Méfiez-vous de cela. Je crois que cela causera une fuite de mémoire assez importante où le contenu de l'iframe restera en mémoire même après que vous changiez son URL. –

4

Juste quelque chose à garder à l'esprit: cela ne fonctionnera jamais, si je comprends bien, si le contenu iframe est inter-domaine. Vous allez vous retrouver avec des erreurs d'autorisations: Autorisation refusée pour http://... pour obtenir la propriété HTMLDocument.nodeType de http://.... Les navigateurs limitent les autorisations dom de l'enfant parent au même domaine.

+0

Fonctionnera, bien sûr, si utilisé dans le même domaine, encore. –

0

Cela a fonctionné pour moi:

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