为什么我收到“Uncaught TypeError: event.composedPath is not a function”

问题描述 投票:0回答:1

下面是一些非常基本的 JQuery 代码,我收到一个无法解释的错误。

event.currentTarget 按预期记录,event.target 也是如此。

但是composedPath()方法调用失败。与错误 “未捕获的类型错误:event.composedPath 不是函数”

代码是

    $(window).on('click', function(event) {

        console.log(event.currentTarget);
        console.log(event.target);
        event.composedPath().forEach((affected) => console.log(affected));

    });

任何人都可以发现我做错了什么,或者想到错误的任何原因吗?希望我遗漏了一些非常明显的东西。

javascript jquery event-handling dom-events
1个回答
1
投票

https://api.jquery.com/category/events/event-object/

jQuery的事件系统根据W3C标准规范事件对象。事件对象保证被传递到事件处理程序。 原始事件中的大多数属性都会被复制并标准化为新的事件对象。

在这种情况下,jQuery 事件不包含composedPath

/*
$(window).on('click', function(event) {
  // console.log(event.currentTarget);
  // console.log(event.target);
  console.log(event.composedPath)
  // event?.composedPath().forEach((affected) => console.log(affected));
});
*/

window.addEventListener('click', function(event) {
  // console.log(event.currentTarget);
  // console.log(event.target);
  console.log(event.composedPath)
  event?.composedPath().forEach((affected) => console.log(affected));

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

解决方法

$(window).on('click', function(event) {
  if (event.originalEvent && typeof event.originalEvent.composedPath === 'function') {
    console.log(event.originalEvent.composedPath());
  } else {
    console.log('composedPath is not available');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.