2008-10-07 63 views
16

有誰知道crossbrowser相當於explicitOriginalTarget事件參數嗎?這個參數是Mozilla特有的,它給了我造成模糊的元素。假設我在我的頁面上有一個文本輸入和一個鏈接。文字輸入有重點。如果我點擊鏈接,文本輸入的模糊事件通過explicitOriginalTarget參數爲我提供了Firefox中的鏈接元素。Crossbrowser相當於explicitOriginalTarget事件參數

我延長Autocompleter.Base的方法的onblur就毫不掩飾的搜索結果時,搜索字段失去焦點,以給定的元素。默認情況下,如果搜索字段失去焦點到任何元素,則onBlur方法將隱藏。

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap(
function(origfunc, ev) { 
    var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event's explicitOriginalTarget property 
    var callOriginalFunction = true; 
    for (i = 0; i < obj.options.validEventElements.length; i++) { 
     if ($(obj.options.validEventElements[i])) { 
      if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) { 
       callOriginalFunction = false; 
       break; 
      } 
     } 
    } 
    if (callOriginalFunction) { 
     return origFunc(ev); 
    } 
} 
); 


new Ajax.Autocompleter("search-field", "search-results", 'getresults.php', { validEventElements: ['search-field','result-count'] }); 

謝謝。

回答

9

中沒有與任何比基於Gecko的瀏覽器的其他的到explicitOriginalTarget。在Gecko中,這是一個內部屬性,它不應該被應用程序開發人員使用(可能是由XBL綁定編寫器)。

+0

謝謝謝爾蓋。也許我應該開始使用事件委託編寫我自己的方法,而不是嘗試擴展Autocompleter的onBlur方法。通過事件委託並使用一些全局變量,我可以解決這個問題。 – matte 2008-10-08 07:08:03

1

看起來它是用於擴展作家比網頁設計更多設計...

我會看兩個目標(或潛在目標),模糊/焦點事件和共享他們的信息。
確切的實現可能實際上取決於目的。

+0

我還以爲看着這兩個目標模糊/焦點事件,但如果Firefox已經針對特定參數(explicitOriginalTarget),也許是其他瀏覽器有太多。也許不是一個參數,而是一個黑客。 – matte 2008-10-07 19:46:49

3

大致相當於爲Mozilla的.explicitOriginalTarget在IE是document.activeElement。我說粗略的等價物,因爲根據你的情況,它有時會在DOM節點樹中返回一個稍微不同的級別,但它仍然是一個有用的工具。不幸的是,我仍然在尋找一款谷歌瀏覽器的等價物

0

對於IE,你可以使用srcElement,並迫使它。

if(!selectTag.explicitOriginalTarget) 
    selectTag.explicitOriginalTarget = selectTag.srcElement; 
3

IE srcElement不包含相同的元素作爲FF explicitOriginalTarget。很容易看到:如果您有一個帶有onClick動作的按鈕字段和一個帶有onChange動作的文本字段,請更改文本字段並將光標直接移至該按鈕並單擊它。此時,IE srcElement將成爲文本字段,但explicitOriginalTarget將成爲按鈕字段。對於IE,您可以從event.xevent.y屬性中獲取鼠標點擊的x,y座標。

不幸的是,Chrome瀏覽器提供的既不是爲了點擊explicitOriginalTarget或鼠標座標。你可以自己去找出onChange事件發生的位置。爲此,審慎使用mousemovemouseout事件可以提供鼠標跟蹤,然後可以在onChange處理程序中對其進行檢查。

3

2015更新...您可以在Chrome上使用event.relatedTarget。這樣一個基本的東西,希望其他瀏覽器將遵循...

+1

不幸的是,它看起來像Firefox沒有或暴露.explicitOriginalTarget了,也沒有實現.relatedTarget,但2015年7月。https://bugzilla.mozilla.org/show_bug.cgi?id = 962251 – 2015-07-15 19:40:04