为什么“开启者。$(文件).trigger('custom')”不起作用?

时间:2012-12-12 09:10:29

标签: javascript jquery publish-subscribe

我想用jQuery实现简单的pub / sub模式。 所以我在父页面上添加了这样的代码:

父页面:

$(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不能用于弹出窗口?

2 个答案:

答案 0 :(得分: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之类的对象)。

答案 1 :(得分:0)

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

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