当前位置: 首页 > 面试题库 >

在Firefox中运行的event.path是未定义的

松和安
2023-03-14
问题内容

event.path[n].id在Firefox中运行时,出现此错误。它可以在其他浏览器中使用。

event.path未定义


问题答案:

对象的path属性Event是非标准的。标准等效项是composedPath,这是一种方法。但这是新的。

因此,您可能想要尝试回退到该位置,例如:

var path = event.path || (event.composedPath && event.composedPath());
if (path) {
    // You got some path information
} else {
    // This browser doesn't supply path information
}

显然,如果浏览器不提供路径信息,它将不会为您提供路径信息,但是它同时支持旧方法和新的标准方法,因此将尽其所能地跨浏览器。

例:

document.getElementById("target").addEventListener("click", function(e) {

  // Just for demonstration purposes

  if (e.path) {

    if (e.composedPath) {

      console.log("Supports `path` and `composedPath`");

    } else {

      console.log("Supports `path` but not `composedPath`");

    }

  } else if (e.composedPath) {

    console.log("Supports `composedPath` (but not `path`)");

  } else {

    console.log("Supports neither `path` nor `composedPath`");

  }



  // Per the above, get the path if we can

  var path = e.path || (e.composedPath && e.composedPath());



  // Show it if we got it

  if (path) {

    console.log("Path (" + path.length + ")");

    Array.prototype.forEach.call(

      path,

      function(entry) {

        console.log(entry.nodeName);

      }

    );

  }

}, false);


<div id="target">Click me</div>

在我的html" target="_blank">测试(2018年5月更新)中,IE11和Edge都不支持pathcomposedPath。Firefox支持composedPath。Chrome支持path(这是Google的原始想法)和composedPath

因此,我认为您无法直接在IE11或Edge上获取路径信息。你可以很明显,获得通过的路径e.target.parentNode和每个随后parentNode,这
通常 是相同的,但当然点的path/ composedPath是,它并不 总是
该事件被触发后,相同的(如果事情修改DOM但在此之前你的处理器接到电话)。



 类似资料:
  • 考虑以下C程序: null 访问易失性对象、修改对象、修改文件,或者调用执行那些操作中的任何操作的函数都是副作用,它们是执行环境状态的改变。表达式的计算通常包括值计算和副作用的启动。用于lvalue表达式的值计算包括确定指定对象的标识。 Sequenced before是单线程执行的计算之间的非对称、传递、成对关系,它导致这些计算之间的部分顺序。给定任意两个评价A和B,如果A排序在B之前,那么A的

  • 尽管标题出现了,但这并不是一个哲学问题。 从未初始化的数组读取 使用错误数据 使用不可移植构造。(即内存分配的细节1) 导致具有的行为 标准没有要求产生可预测的效果 我会称之为“未定义的行为”。但也许我错过了什么(?) null null

  • 问题内容: 我基本上是这样做的,所以当您单击按钮进行“投票”时 目前我有 client.php 如您在上方看到的,有一个onclick forvotUp()函数。 在页面底部,我有 并在 scripts.js中 (我从有关单击div运行php文件的教程中获得了voteUp()的知识) 最后在 voteup.php中 当我单击带onclick =“ voteUp()”的DIV的Vote Up按钮时

  • 问题内容: 我正在对WCF服务进行AJAX调用,当我传递数据时,我使用JSON.stringify() 通话返回并在FF和Chrome中正常运行,但在IE8中则无法正常运行。我收到一个错误:“ JSON”未定义 建议? PS我也希望这在IE7中工作 问题答案: 使用json2可以实现一致的跨浏览器实现。 https://github.com/douglascrockford/JSON- js

  • 问题内容: 为什么我在这里未定义状态?我尝试了各种解决方案,但没有一个对我有用。有人可以指出这里做错了什么吗 编辑: 组件的完整代码 当从服务器动态加载侧边栏内容时,也有人可能会建议一个更好的选择 问题答案: 通过使用这种方式,您会失去上下文,而不是您所期望的那样。 在这种情况下,请将箭头功能用作: 或者, 这就是我的建议 ,请移至方法之外: 也可以将其绑定到构造函数中:

  • 问题内容: 每次执行时,都会在输出日志中附加一行提示。 在Windows和Linux上的Firefox和Chrome中都会发生。 问题答案: 如果您是从JS文件运行的,则不应添加此行。 如果您是从控制台本身运行的,那么这很有意义。这是为什么:在控制台中,您可以键入变量的名称(例如,尝试键入),并打印有关该变量的信息。当您从控制台运行任何void函数(例如console.log)时,在这种情况下,它