【发布时间】:2014-06-24 21:40:01
【问题描述】:
为什么我可以使用window.parent.document 上的事件委托来监听某些事件,而不能监听其他事件?具体来说,我发现我能够监听按钮的单击事件,但尝试对 jQueryUI 的 dialogbeforeclose 事件执行相同操作不会触发事件处理程序。
例如绑定到一个按钮的点击事件,如下所示
$(window.parent.document).on('click', '#btnTest', function () {
alert('Button clicked');
});
但是尝试像下面这样收听自定义 jQuery UI event 却没有(绑定到文档时相同的代码在父页面本身上起作用)
$(window.parent.document).on('dialogbeforeclose', function () {
alert('Dialog closing');
});
但是将它绑定到父级的身体上
window.parent.$('body').on("dialogbeforeclose", function(event, ui) {
alert('Bound on body');
});
对于一些额外的上下文,我有一个父 html 页面,它有一个 jQuery UI 对话框,其中有一个 iFrame。
父 HTML
<div id="btnCnt">
<input type="button" id="btnTest" value="Test 2"/>
</div>
<div id="popUpCnt" >
<iframe id="frmTest">
</iframe>
</div>
【问题讨论】:
-
可能与您从子页面而不是父页面使用
$的事实有关。 jQuery 的很多操作都基于当前文档,这将是您正在使用的$定义的页面的文档。 -
我确实想过,但为什么会有所作为?为什么它适用于某些活动?
-
对不起,我更新了我的评论。要知道为什么,我们必须找到源头。
-
您似乎是正确的,我只是尝试使用父级的 jQuery 对象对其进行测试并且它有效。你知道我可以在哪里获得更多信息吗?
-
我的意思是,你将它绑定到身体这一事实是无关紧要的。您也可以将其绑定到文档以获得相同的效果,不同之处在于您使用了
$的哪个实例。
标签: javascript jquery jquery-ui iframe event-delegation