【问题标题】:Jquery custom event to other document doesn't workJquery自定义事件到其他文档不起作用
【发布时间】:2016-03-11 12:56:45
【问题描述】:

请考虑这个测试:

主文件:

<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 配合使用)

【问题讨论】:

    标签: javascript jquery jquery-events


    【解决方案1】:

    问题是您需要考虑您用来定义目标和触发器的 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 实例。这是点击事件以及自定义事件的情况。

    【讨论】:

    • mainwindow.$(mainwindow.document).on(...) 工作!谢谢
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多