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 实例。点击事件和自定义事件都是如此。