簡體   English   中英

在模糊事件之后如何獲取焦點事件?

[英]How to get the focus event following the blur event?

當我在(javascript)處理程序中收到onBlur事件時,我想知道onFocus事件是什么(如果會有)。 這怎么可能?

示例:我有一組文本框,它們組成一個組。 僅當整個組失去焦點時,我才想通知訂戶有關組onBlur事件的信息。 因此,如果發生onBlur事件,則僅在發現該組的另一個文本框上沒有緊隨其后的onFocus事件時才轉發它。

我現在通過延遲來執行此操作,並查看在此期間是否發生了焦點事件。 但是我不喜歡這種解決方案,因為:由於延遲,模糊發生在焦點之后,並且延遲模糊中包含的事件是“舊的”,這在后續處理中可能會比較棘手。

我的想法是:當我接收到模糊事件時,在“事件隊列”中查找以檢測將要發生的任何onFocus事件...但是我不知道這是否可行以及如何執行:(...

-編輯:

審核完您的問題后,我不太確定您要問什么,因此不確定所發布的內容是否合適。 無論如何,我把它留在這里考慮。

您可以使用地圖和'this'變量輕松完成此操作:

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的變量,並檢查該對象是否等於您想要的對象。

應該將焦點和模糊事件添加到事件隊列中,因此簡單的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);
 }

您可以使用委派方法進行模糊和聚焦
因此,您將檢查重點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM