Jquery 对其他文档的自定义事件不起作用
Jquery custom event to other document doesn't work
请考虑这个测试:
主文件:
<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>
我的目标是在第二个 window 中为主要 window 中的自定义事件添加一个事件侦听器。
我发现并且此测试可以证明的是,侦听其他 window 的事件适用于“标准”事件,例如点击,而不适用于自定义事件 。
你能告诉我这是 jQuery 限制还是我遗漏了什么?
(很抱歉我无法将该代码放入 jsfiddle 中,因为 window.open
不能很好地与 jsfiddle 一起使用)
问题是您需要考虑用于定义目标和触发器的 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 实例。点击事件和自定义事件都是如此。
请考虑这个测试:
主文件:
<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>
我的目标是在第二个 window 中为主要 window 中的自定义事件添加一个事件侦听器。
我发现并且此测试可以证明的是,侦听其他 window 的事件适用于“标准”事件,例如点击,而不适用于自定义事件 。
你能告诉我这是 jQuery 限制还是我遗漏了什么?
(很抱歉我无法将该代码放入 jsfiddle 中,因为 window.open
不能很好地与 jsfiddle 一起使用)
问题是您需要考虑用于定义目标和触发器的 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 实例。点击事件和自定义事件都是如此。