Javascript 如何在addEventListener跨浏览器中使用e.path?
这适用于Chrome:Javascript 如何在addEventListener跨浏览器中使用e.path?,javascript,google-chrome,firefox,addeventlistener,Javascript,Google Chrome,Firefox,Addeventlistener,这适用于Chrome: document.querySelectorAll('input[type="text"]').forEach(elt => { elt.addEventListener("change", e => { localStorage.setItem(e.path[0].name, e.path[0].value); }); }); 但在Firefox上会生成以下内容: 类型错误:e.path未定义 什么是跨浏览器等效的e.
document.querySelectorAll('input[type="text"]').forEach(elt => {
elt.addEventListener("change", e => {
localStorage.setItem(e.path[0].name, e.path[0].value);
});
});
但在Firefox上会生成以下内容:
类型错误:e.path未定义
什么是跨浏览器等效的
e.path[0]
?Firefox等效的是e.composedPath()
如果这两个元素在浏览器中都不受支持,它仍然不会给出错误,但会设置项未定义:未定义,因为使用了path?.property这是什么类型的元素?@DanielA.White我编辑以增加精度:这是一个
您会使用什么跨浏览器解决方案(适用于Firefox、Chrome、IE等)这似乎解决了问题::var path=event.path | |(event.composedPath&&event.composedPath())
PS:简单地e.target
?如果您只需要路径[0],那么e.target是正确的
document.querySelectorAll('input[type="text"]').forEach(elt => {
elt.addEventListener("change", e => {
let path = e.path || e.composedPath()
localStorage.setItem(path[0]?.name, path[0]?.value);
});
});