event.path undefined con Firefox e vue.js

Innanzitutto sto usando vue-js. e NodeJs

Ho un problema con firefox:

Io uso event.path [n] .id e con firefox ho avuto un errore "event.path undefined"

Ma funziona multato in altri browser.

Avete idea di perché?

Grazie!

La properties; path degli oggetti Event non è standard. L'equivalente standard è composedPath , che è un metodo. Ma è nuovo.

Quindi puoi provare a ricadere a questo, ad esempio:

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

Ovviamente questo non ti dà informazioni sul path se il browser non lo fornisce, ma consente sia il modo vecchio che il nuovo modo standard e così farà il suo miglior cross browser.

Esempio:

 document.getElementById("target").addEventListener("click", function(e) { // Just for demonstration purposes if (e.path) { console.log("Supports `path`"); } else if (e.composedPath) { console.log("Supports `composedPath`"); } 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> 

È ansible creare la propria function compostaPath se non è implementata nel browser:

 function composedPath (el) { var path = []; while (el) { path.push(el); if (el.tagName === 'HTML') { path.push(document); path.push(window); return path; } el = el.parentElement; } } 

Il valore restituito è equivalente a event.path di Google Chrome.

Esempio:

 document.getElementById('target').addEventListener('click', function(event) { var path = event.path || (event.composedPath && event.composedPath()) || composedPath(event.target); }); 

Questa function serve come Event.composedPath() per Event.composedPath() o Event.Path

 function eventPath(evt) { var path = (evt.composedPath && evt.composedPath()) || evt.path, target = evt.target; if (path != null) { // Safari doesn't include Window, and it should. path = (path.indexOf(window) < 0) ? path.concat([window]) : path; return path; } if (target === window) { return [window]; } function getParents(node, memo) { memo = memo || []; var parentNode = node.parentNode; if (!parentNode) { return memo; } else { return getParents(parentNode, memo.concat([parentNode])); } } return [target] .concat(getParents(target)) .concat([window]); }