1

我想用 jQuery 实现简单的发布/订阅模式。所以我在父页面上添加了一些这样的代码:

父页面:

$(document).bind('custom', function() { ... });

当我像这样在同一页面上触发时,它工作正常:

同一页:

$(document).trigger('custom');  // Working.

但是当我在弹出页面上触发它时,它不起作用。

弹出页面:

opener.$(document).trigger('custom');  // Not working.
$(opener.document).trigger('custom');  // Not working.

如果我将事件绑定到<body>元素,它可以找到。

父页面:

$('body').bind('custom', function() { ... });

弹出页面:

opener.$('body').trigger('custom');  // Working.

为什么绑定到document弹出窗口不起作用?

4

2 回答 2

2

正如@11684 所说,让它发挥作用的答案是:

opener.$(opener.document).trigger('custom');

@Rory 的回答:

$(opener.document).trigger('custom');

无法正常工作,因为弹出窗口$没有opener.document.

和这个:

opener.$(document).trigger('custom');

不起作用,因为它document是弹出窗口document,所以它与opener.document.

最后,

opener.$('body').trigger('custom');

正在工作,因为开瓶器$有事件处理程序,而参数(body)只是字符串(不是像 的对象document)。

于 2012-12-12T10:25:28.490 回答
0

您需要将整体opener.document放入一个 jQuery 对象中。在弹出窗口中试试这个:

$(opener.document).trigger('custom'); 
于 2012-12-12T09:13:51.947 回答