从iframe触发jQuery事件

时间:2011-07-14 17:20:20

标签: jquery iframe

这是一个场景,我在iframe中发生了一些事件,直到现在一切都运行良好。我刚遇到问题,我想从iframe向父母发送一个事件。

我正在使用它从iframe触发事件:

$('body', window.parent.document).trigger('eventName');
//and I've also tried
$(window.parent.document).find('body').trigger('eventName');

然后在父页面中我正在听这样的事件:

$('body').bind('eventName', myFunction)

我知道脚本会触发,因为我在触发器之前和之后卡住了console.log。 iframe位于同一个域中,因此没有任何问题。

我可以直接在父页面上调用一个函数:window.parent.functionName但是我想知道使用基于事件的解决方案是否可行。

解决

@cwolves答案很有效:

parent.$('body').trigger( 'eventName' );

3 个答案:

答案 0 :(得分:23)

如果您在父框架中加载了jQuery,请尝试:

parent.$('body').trigger( 'eventName' );

如果没有,试试这个,我不确定它是否会起作用,但我只是看了jQuery源代码并认为它​​可能:

var pBody = $( parent.document.body );
pBody.trigger( 'eventName', pBody.data() );

(绑定eventName时也做同样的事情) 据我所知,问题是jQuery正在使用本地页面中的数据,这会导致问题,因为它看起来像是在试图从其他帧加载数据。换句话说,这是一团糟,但data.bind等接受了.trigger参数。

答案 1 :(得分:1)

在iframe js代码中尝试此操作

var parentWin = $( window.parent.document.body );
jQuery.event.trigger('eventName', parentWin.data(), parentWin );

答案 2 :(得分:-2)

因此,这将是您的iFrame中的代码:

$('#myElem').click(function() {

    window.parent.success_msg();

});

此代码需要位于父窗口中:

window.success_msg = function() {

    // Your code goes here

};

您还需要在服务器上运行它,无论是localhost还是托管。