2009-02-14 21 views
9

Ich möchte einen Ereignis-Handler Keydown einem iframe zuweisen. Etwas Ähnliches zu den reinen JS:Hinzufügen von Ereignishandler zu einem Iframe mit JQuery

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

Ich habe versucht:

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

Aber es funktioniert nicht .. Bitte helfen Sie!

+0

möglich Duplikat [keydown Ereignis auf einem iframe] (http://stackoverflow.com/questions/1199075/keydown-event-on-a-iframe) – paulmorriss

Antwort

0

Die $ Funktion ersetzt die Notwendigkeit für document.getElementById

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

contentWindow ist die iframe ‚s window Objekt. Sie wollen, dass die iframe ‚s document statt:

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

Bitte beachte, dass ich nicht sicher bin, wie jQuery Elemente aus anderen Fenstern/Frames reagiert.

+2

Große ! Danke, das klappt! –

+1

Seien Sie vorsichtig damit. Ich glaube, dass dies zu einem ziemlich großen Speicherverlust führen wird, bei dem der Inhalt des Iframes auch nach dem Ändern seiner URL im Speicher verbleibt. –

4

Nur etwas zu beachten: Dies funktioniert nie, soweit ich verstehe, wenn der Iframe-Inhalt domänenübergreifend ist. Sie werden mit Berechtigungsfehlern enden: Berechtigung verweigert für http://..., um Eigenschaft HTMLDocument.nodeType von http://... zu erhalten. Browser begrenzen Eltern Child dom Berechtigungen auf dieselbe Domäne.

+0

Wird natürlich funktionieren, wenn es innerhalb der gleichen Domäne verwendet wird. –

0

Das ist für mich gearbeitet:

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