2009-09-04 151 views
0

我喜歡在我的(javascript)處理程序中收到onBlur事件時知道onFocus事件是什麼(如果有的話)。這怎麼可能?例如:我有一組文本框組成一組。只有當整個團隊失去焦點時,我纔會通知訂戶有關該團體的事件。所以如果發生onBlur事件,我只想轉發它,當我注意到它沒有在該組中的另一個文本框上的onFocus事件後。如何獲得模糊事件後的焦點事件?

我現在通過延遲並查看焦點事件是否發生在與此同時。但是我不太喜歡這個解決方案:因爲延遲模糊發生在焦點和它包含在延遲模糊中的事件之後,是「舊的」,這在進一步處理中可能是棘手的。

我的想法是:尋找「事件隊列」,當我收到模糊事件,檢測任何onFocus事件將遵循...但我不知道這是可能的,以及如何做到這一點:(...

回答

1

- 編輯:

在回顧了你的問題之後,我不太清楚你在問什麼,所以我不知道我發佈的內容是否合適,無論如何,我都留在這裏考慮。

你可以用地圖和「這個」變量做到這一點很平凡:

var map = new Object(); 

... 

function doBlur (obj) { 
    if(map[obj] == "focus"){ 
    } 
} 

function doFocus (obj) { 
    map[obj] = "focus"; 
} 

<input onblur="doBlur(this);" onfocus="doFocus(this);" /> 

反而變本加厲,因爲只有一個文本框,可以在同一時間集中,你可以有一個名爲lastFocus變量,並檢查該物體是否等於你想要的物體。

+0

坦克,但我認爲我們有一個誤區。 我想要什麼:當我處於doBlur方法中時,如何確定焦點事件是否會跟隨模糊事件。 希望這個更清楚。 – edbras 2009-09-04 11:22:18

+0

那麼,你不能。您只能檢查是否設置超時,並等待查看是否在該超時命中之前觸發了focus()事件。 (或者只是看看focus()事件是否再次被觸發,當'obj'實例不同時)。 – 2009-09-04 11:30:39

0

您可以使用委派方法blur and focus
因此,您將檢查重點。

+0

謝謝,但你能提供更多的細節? 注意:如果我收到我的模糊事件,我想知道焦點事件是否會成爲下一個事件之一......我無法看到如何通過委派/事件捕獲來完成此操作.. – edbras 2009-09-04 11:19:12

+0

使用事件代理可以在一個地方處理所有事件。您可以創建一個全局(或單身人士,如果您更喜歡更清晰的解決方案)來存儲上次焦點事件目標或模糊事件目標。根據以前的事件目標,改變腳本的行爲。 – 2009-09-04 11:24:00

+0

因此,在處理模糊事件時,我無法查看焦點事件是否在模糊事件之後發生? – edbras 2009-09-04 13:38:35

1

焦點和模糊事件應該添加到事件隊列,所以一個簡單的1-100毫秒setTimeout可能會訣竅。

我知道你不使用jQuery - 但我更容易在空氣中的代碼示例使用它:

var blurTimeout; 

function blurAlert() { 
    alert('Lost Focus'); 
} 

// assign these two simple functions to all inputs on the page. 
$('input').blur(function() { 
    blurTimeout=setTimeout(blurAlert, 1); 
}).focus(function() { 
    clearTimeout(blurTimeout); 
}); 

我只是在Firefox測試了它在1ms的,我敢肯定,時機也適用於其他瀏覽器。由於處理事件的方式,模糊火災,然後集中,然後計時器。

如果你真的想確保從事件保持this在你的事件處理程序變爲:

function() { 
    blurTimeout = setTimeout(function() { 
    blurAlert.apply(this,arguments); 
    }, 1); 
} 
+0

我不明白你的解決方案。 爲什麼你提出這個問題?,因爲我的問題,我解釋了我現在擁有的定時器解決方案...... 我想要什麼:知道焦點事件是否會在模糊事件發生之後跟隨... – edbras 2009-09-04 11:20:41

+0

唯一的確定聚焦事件是否會跟隨模糊事件的方法是延遲處理模糊事件,直到焦點事件已經在隊列中。 1ms超時會延遲模糊處理程序的腳本執行,直到您可以處理焦點事件。 – gnarf 2009-09-04 17:39:24

相關問題