请考虑以下测试:
主文件:
<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>
我的目标是在第二个窗口中添加一个事件侦听器,以便在主窗口中添加自定义事件。
我发现并且可以通过此测试证明,侦听其他窗口的事件适用于“标准”事件(例如click),而不适用于自定义事件。
您能告诉我这是否是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实例。点击事件和自定义事件都是这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句