使用JQuery为iframe添加事件处理程序

9

我想给一个iframe分配一个keydown事件处理程序。类似于纯JS:

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

我尝试过:

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

但是它不起作用...请帮忙!

可能是iframe上的keydown事件的重复问题。 - paulmorriss
4个回答

15

contentWindowiframewindow对象。你需要获取iframedocument对象:

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

请注意,我不确定jQuery如何处理来自其他窗口/框架的元素。


1
小心处理这个。我相信这会导致一个相当大的内存泄漏,即使在更改其URL后,iframe的内容仍将保留在内存中。 - Josh Mouch

4

请注意:据我所知,如果iframe内容跨域,这将永远不起作用。您将遇到权限错误:Permission denied for http://... to get property HTMLDocument.nodeType from http://...。浏览器将父子dom权限限制在同一域中。


0

$函数可以替代document.getElementById的使用

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

0

这对我有用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接