[英]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.