Javascript 如何在addEventListener跨浏览器中使用e.path?

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.

这适用于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.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); 
    });
});