2016-04-25 46 views
9

Polymer 1.0 kullanıyorum ve Chrome'da bir butona tıkladığınızda MouseEvent üretiliyor. Bu nesnesinin, tıklatılan düğmeye sıralı bir ana öğe dizisi olan bir path özelliği vardır. Ancak, Firefox & Safari'de, path özelliğine sahip olmayan click oluşturulur. Bana aynı bilgiyi veren click nesnesinin eşdeğer bir özelliği var mı?Firefox & Safari'de MouseEvent.path eşdeğeri

cevap

24

Bu mevcut değil, ama gerçekten bu özelliğe sahip olmak istiyorsanız, o zaman şöyle Olay nesnesinin yerli prototip genişletmek olabilir: Ancak

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; 
    } 
}); 

senin yerinde olsaydım, yapmazdım prototip uzatmak - yerine yukarıda belirtilen gibi bir işlev yaratacağım.

Ayrıca, yalnızca bu tür olayları kapsamak istiyorsanız, Event.prototype öğesini MouseEvent.prototype olarak değiştirirdim.

+0

Awesomesauce. Tam olarak aradığım cevap değil, sorunumu mükemmel bir şekilde çözüyor. – wogsland

+0

Merak etme, @wogsland, hangi cevabı veya cevabını beklediniz? –

+3

Firefox'ta oluşturulan ve henüz henüz tahmin etmediğim nesnede eşdeğer bir özellik olacağını düşünmüştüm. – wogsland