首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

文本框失去焦點為空時強制重新聚焦:setTimeout 避免事件衝突

     編輯:程式設計疑難解答

問題

blur 事件中直接 focus() 會導致瀏覽器事件循環衝突,焦點無法生效。

解決

$("#tmpName").blur(function() {
    var val = $.trim($(this).val());
    if (val.length === 0) {
        setTimeout(function() {  // 關鍵:延時到下一事件循環
            $("#tmpName").focus();
        }, 10);
    }
}).focus(); // 頁面加載自動聚焦

原理

  • blur 觸發時,瀏覽器正處理焦點轉移流程,立即調用 focus() 會被忽略或導致遞歸。
  • setTimeout(fn, 0/10) 將 focus() 推到下一個宏任務隊列,待當前事件處理完畢再執行,繞過衝突。

擴展

同理適用於 alert、confirm 等阻塞 UI 的操作後強制聚焦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved