2016-04-25 11 views
9

Utilizzo Polymer 1.0 e quando viene fatto clic su un pulsante in Chrome viene generato un valore MouseEvent. Questo oggetto MouseEvent ha una proprietà path che è una matrice ordinata di elementi padre per il pulsante su cui si fa clic. In Firefox & Safari, tuttavia, viene generato uno click che non ha una proprietà path. Esiste una proprietà equivalente dell'oggetto click che mi dà le stesse informazioni?MouseEvent.path equivalente in Firefox e Safari

risposta

24

Non è disponibile, ma se davvero desidera avere questa proprietà, allora si potrebbe estendere il prototipo originario dell'oggetto evento in questo modo:

if (!("path" in Event.prototype)) 
Object.defineProperty(Event.prototype, "path", { 
    get: function() { 
    var path = []; 
    var currentElem = this.target; 
    while (currentElem) { 
     path.push(currentElem); 
     currentElem = currentElem.parentElement; 
    } 
    if (path.indexOf(window) === -1 && path.indexOf(document) === -1) 
     path.push(document); 
    if (path.indexOf(window) === -1) 
     path.push(window); 
    return path; 
    } 
}); 

Tuttavia, se fossi in te, non lo farei estendere il prototipo - vorrei creare una funzione come menzionato sopra invece.

Inoltre, cambierei Event.prototype in MouseEvent.prototype se si desidera coprire solo quei tipi di eventi.

+0

Awesomesauce. Non è esattamente la risposta che stavo cercando, ma risolve perfettamente il mio problema. – wogsland

+0

Per curiosità, @wogsland, quale risposta o tipo di risposta, speravi? –

+3

Ho pensato che ci sarebbe stata una proprietà equivalente nell'oggetto creato in Firefox il cui nome non avevo ancora indovinato. – wogsland

Problemi correlati