首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >其他文档的Jquery自定义事件不起作用

其他文档的Jquery自定义事件不起作用
EN

Stack Overflow用户
提问于 2016-03-11 12:56:45
回答 1查看 147关注 0票数 1

请考虑这个测试:

主文件:

代码语言:javascript
运行
复制
<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>

第二个(弹出)文件:

代码语言:javascript
运行
复制
 <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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-15 12:12:05

问题是,您需要考虑用于定义目标和触发器的jQuery实例。

代码语言:javascript
运行
复制
secondwindow.html -> $(mainwindow.document)

代码语言:javascript
运行
复制
main.html -> $(document)

它必须是:

代码语言:javascript
运行
复制
secondwindow.html -> mainwindow.$(mainwindow.document)

或将其逆转:

代码语言:javascript
运行
复制
main.html -> secondwindow.$(document)
secondwindow.html -> $(mainwindow.document)

jQuery事件由jQuery.event对象管理,这与正在使用的jQuery实例相关联。例如,您可以以这样的方式获得注册的事件:

代码语言:javascript
运行
复制
 $.event.global

您将看到注册的事件不仅依赖选择器本身,还依赖于jQuery实例。单击事件和自定义事件都是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35940871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档