绑定到动态创建的iframe内的事件

时间:2012-06-18 17:34:31

标签: javascript iframe jquery

我需要绑定到用户执行特定操作后动态创建的iframe内的事件(比如click上的任意<input>)。在iframe中附加iframe和代码的代码不是我的,我无法以任何方式更改它(这是一个CMS管理面板)。

如何使用 jQuery 1.6 收听事件(再次,这不是我的选择,我坚持使用它)。我认为delegate()可能是我想要的:

$('body').delegate('iframe input', 'click', function(e) {
    alert('bingo?');
});

但是点击输入时上面没有提醒。但是,下面的内容符合预期:

$('body').delegate('input', 'click', function(e) {
    alert('bingo?');
});

但这不在iframe中。

src的{​​{1}}显然指向同一个域。

非常感谢任何帮助或只是正确方向的刺激。

1 个答案:

答案 0 :(得分:17)

'iframe input'未选择input中的iframe元素。

您可以绑定事件,如

$('body iframe').contents().find('input').bind('click',function(e) {
    alert('bingo?');
 });

我认为您也可以使用类似

的内容
$('body iframe').contents().find('body').delegate('input','click',function(e) {
    alert('bingo?');
 });

要检测iframe是否已完全加载,请使用此答案中描述的方法 https://stackoverflow.com/a/5788723/344304

添加主/父文档:

function iframeLoaded() {
    $('body iframe').contents().find('input').bind('click',function(e) {
        alert('bingo?');
     });
}

添加iframe文档:

window.onload = function() {
    parent.iframeLoaded();
}

或使用

$('body iframe').load(function(){
     $('body iframe').contents().find('input').bind('click',function(e) {
            alert('bingo?');
         });
});