在Firefox中运行的event.path是未定义的
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>
在我的测试(2018年5月更新)中,IE11和Edge都不支持path
或composedPath
。Firefox支持composedPath
。Chrome支持path
(这是Google的原始想法)和composedPath
。
因此,我认为您无法直接在IE11或Edge上获取路径信息。你可以很明显,获得通过的路径e.target.parentNode
和每个随后parentNode
,这
通常 是相同的,但当然点的path
/ composedPath
是,它并不 总是
该事件被触发后,相同的(如果事情修改DOM但在此之前你的处理器接到电话)。
以上是 在Firefox中运行的event.path是未定义的 的全部内容, 来源链接: utcz.com/qa/427628.html