2009-07-29 20 views
8

Jak uzyskać zdarzenie keydown na elemencie iframe?Zdarzenie keydown na elemencie iframe

+0

Ta odpowiedź działa dla mnie: http://stackoverflow.com/questions/26324213/listen-for-mouse-click-and-keypress-events-winin-free/39617876#39617876 –

Odpowiedz

5

Adding event handler to an iframe using JQuery

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

'$ (" # iframe_id " ") .get (0) .contentWindow.document' jest równoważne' $ (document.getElementById ('iframe_id'). contentWindow.document) ' – BrunoLM

12

Trzeba otworzyć dokument iframe, która jest przez obiekt ContentWindow

$(document.getElementById('IFrameId').contentWindow.document).keydown(function(){ alert('Key down!'); }); 

Upewnij się powiązać zdarzenie po rama została załadowana.

+5

Pamiętaj też, aby powiązać zdarzenie PO załadowaniu ramki, w przeciwnym razie nie będzie strzelać. – claviska

+0

@Aksival Oczywiście zgrzytałem zębami, zastanawiając się, dlaczego to nie działa od wieków. – Ally

+1

@RedHouse Mam zaktualizowaną odpowiedź, aby wyjaśnić ten punkt (Myślałem, że komentarz Aksival byłby jasny, aby ludzie mogli zobaczyć) – James

0

Jest tak późno na odpowiedź, ale może jest przydatne dla kogoś.
Mam ten sam problem, co oznacza, że ​​mam stronę iframe inside a HTML w same domain.
Teraz potrzebuję uzyskać Esc keyup event.
Jednak nie chcę (lub czasami nie mogę) napisać żadnego skryptu wewnątrz ciała iframe.
Aby to zrobić, używam poniższego skryptu do wykrycia, co jest identyfikatorem nadrzędnym elementu, który został wybrany przez kliknięcie na nim.

$(window).load(function() { 
      jQuery(jQuery('[id="frame"]')[0].contentWindow.document).on('keyup', function (e) { 

       var _currntItem = ($(e.target)) 

       if (e.keyCode === 27) { 
        alert(_currntItem.parent().attr('id')); 
       } 
      }); 

Ten kod rozwiązał mój problem.
nadzieję na przydatne.

Powiązane problemy