2016-04-25 100 views
9

我正在使用Polymer 1.0,並且在Chrome中單擊某個按鈕時會生成一個MouseEvent。此MouseEvent對象具有path屬性,該屬性是單擊按鈕的父元素的有序數組。然而,在Firefox & Safari中,會生成一個click,該屬性沒有path屬性。有沒有給我提供相同信息的click對象的同等屬性?在Firefox和Safari中相當於MouseEvent.path

回答

24

這是不可用的,但如果你真的想有這個屬性,那麼你可以擴展Event對象的原始雛形,像這樣:

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

但是,如果我是你,我就不會擴展原型 - 我會創建一個如上所述的函數。

另外我會改變Event.prototype爲MouseEvent.prototype如果你只想覆蓋這些類型的事件。

+0

Awesomesauce。不完全是我正在尋找的答案,但完美地解決了我的問題。 – wogsland

+0

出於好奇,@ wogsland,你希望得到什麼答案或類型的答案? –

+3

我認爲在Firefox中創建的對象中有一個等價的屬性,我的名字我還沒有猜到。 – wogsland