从iframe触发jQuery事件

这是一个场景,我在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' ); 

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

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

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

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

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

在iframe js代码中尝试这个

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

这将是您的iFrame中的代码:

 $('#myElem').click(function() { window.parent.success_msg(); }); 

这段代码需要在父窗口中:

 window.success_msg = function() { // Your code goes here }; 

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