【问题标题】:All JavaScript event listeners pointing to one jQuery file? [WordPress]所有 JavaScript 事件监听器都指向一个 jQuery 文件? [WordPress]
【发布时间】:2018-12-04 00:53:23
【问题描述】:

WordPress 站点上的所有 JavaScript 事件侦听器都指向“jquery.min.js”文件中相同的代码 sn-p:

function(a) {
  return "undefined" == typeof n || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
}

我还有其他带有事件侦听器的 JavaScript 文件。但是,Chrome 和 Firefox 不再显示它们了?这可能是什么原因造成的?

【问题讨论】:

    标签: javascript jquery ajax wordpress


    【解决方案1】:

    如果您使用 jQuery 添加事件侦听器,jQuery 会将其自己的事件调度函数附加为元素的事件侦听器,并将您的事件侦听器添加到它维护的事件调度表中。当事件发生时,jQuery 的事件派发函数被调用,并在事件派发表中查找事件监听器并调用这些事件监听器。

    在做了一些研究之后,我在How to find event listeners on a DOM node when debugging or from the JavaScript code? 找到了 jQuery 事件调度表的数据结构。

    为了让浏览器开发工具显示由 jQuery 添加的事件侦听器,而不是直接附加的 jQuery 调度函数,它必须找到并理解这些 jQuery 事件调度表。如果它无法找到或理解这些 jQuery 事件分派表,那么浏览器开发工具可能会放弃并将 jQuery 分派处理程序显示为普通的 DOM 事件侦听器,而不是事件分派表中的条目。

    您可以通过运行控制台命令转储元素的第一次点击事件调度表条目:

    jQuery(this).data('events').click[0]
    

    在我的 jQuery v1.12.4 浏览器中显示:

    data: undefined
    ​
    guid: 202
    ​
    handler: function submitButtons()
    ​
    namespace: "edit-post"
    ​
    needsContext: undefined
    ​
    origType: "click"
    ​
    selector: undefined
    ​
    type: "click"
    ​
    <prototype>: Object { … }
    

    您是否可以通过在该元素的单击事件侦听器代码中设置断点并在控制台中运行上述命令来对浏览器中具有单击事件处理程序的元素进行此操作。我的猜测是事件调度表的结构不同,浏览器开发工具要么找不到 jQuery 事件调度表,要么无法理解事件调度表的结构。 jQuery 在发布新版本时有时会更改此数据结构。

    【讨论】:

    • 您好洋红色,感谢您的帮助。我发现一些 jQuery 脚本在我不知情的情况下被添加到网站中。所以看起来这些脚本可能会覆盖 WordPress 最初拥有的 jQuery 版本,包括我的自定义脚本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2015-02-03
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多