在使用 JavaScript 事件代理時,開發者發現綁定 onkeyup 事件後,文本輸入框的焦點似乎會自動消失,這讓人感到困惑並急需解決方案。
這個現象並非 onkeyup 事件的預設行為。 正常情況下,onkeyup 事件觸發後,焦點應保持在當前輸入元素上,不會自動轉移或消失。如果發生焦點丟失,通常是由以下原因導致:
blur() 調用或導致焦點轉移的邏輯innerHTML 重置父容器),導致原輸入元素被銷毀並重建display: none 或 visibility: hidden)使元素不可見onkeydown、onkeypress)干擾了焦點行為element.blur() 或 element.focus() 轉移焦點.html()、React 狀態更新導致組件重新掛載)onkeyup 綁定的簡單頁面,驗證焦點是否正常保持使用事件代理時,建議將事件綁定在較高層級的穩定容器上(如 document 或表單元素),並通過 event.target 判斷事件源。同時避免在事件處理中進行大範圍 DOM 更新,必要時可使用 requestAnimationFrame 或微任務延遲執行 DOM 操作,以減少焦點干擾。