请考虑这个测试:
主文件:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
var secondwindow = false;
$(function() {
secondwindow = window.open("secondwindow.html");
$(secondwindow).load(function() {
secondwindow.setWindow(window);
})
$("#custom").click(function() {
$(document).trigger("custom");
});
});
</script>
</head>
<body>
<button id="click">Click event</button>
<button id="custom">Custom event</button>
</body>
</html>
第二个(弹出)文件:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
var mainwindow = false;
function setWindow(obj) {
mainwindow = obj;
$(mainwindow.document).on("click", function() {
$("body").append("<p>Click event from main window</p>");
});
$(mainwindow.document).on("custom", function() {
$("body").append("<p>Custom event from main window</p>");
});
};
</script>
</head>
<body>
</body>
</html>
我的目标是在第二个窗口中为主窗口中的自定义事件添加一个事件侦听器。
我发现,这个测试可以证明,侦听其他窗口的事件适用于“标准”事件,比如单击,而不是自定义事件。
你能告诉我这是jQuery限制还是我遗漏了什么吗?
(很抱歉,我不能把这段代码放在jsfiddle中,因为window.open
不能很好地处理jsfiddle)
发布于 2016-03-15 12:12:05
问题是,您需要考虑用于定义目标和触发器的jQuery实例。
secondwindow.html -> $(mainwindow.document)
与
main.html -> $(document)
它必须是:
secondwindow.html -> mainwindow.$(mainwindow.document)
或将其逆转:
main.html -> secondwindow.$(document)
secondwindow.html -> $(mainwindow.document)
jQuery事件由jQuery.event对象管理,这与正在使用的jQuery实例相关联。例如,您可以以这样的方式获得注册的事件:
$.event.global
您将看到注册的事件不仅依赖选择器本身,还依赖于jQuery实例。单击事件和自定义事件都是这样的。
https://stackoverflow.com/questions/35940871
复制相似问题