在給如div等元素綁定鍵盤事件(如keydown)時, 會發現綁定是失效的。
解決方法:
給當前元素增加 tabindex 屬性:
原理:
div等非輸入性質的元素(與其對應的可輸入性元素有input, textarea), 是不可被聚焦的。 所以無法監聽其的鍵盤事件。
而通過增加 tabindex 屬性,可以指定該元素可觸焦。
關於tabindex(引自MDN):
tabindex 全局屬性 是個整數,表示元素(如果可聚焦)是否能夠接受輸入焦點。 如果它應該參與鍵盤序列導航,那么就是它的位置。
它可以設為多種值:
tabindex=負值 (通常是tabindex=“-1”),表示元素是可聚焦的,但是不能通過鍵盤導航來訪問到該元素,用JS做頁面小組件內部鍵盤導航的時候非常有用。
tabindex="0" ,表示元素是可聚焦的,並且可以通過鍵盤導航來聚焦到該元素,它的相對順序是當前處於的DOM結構來決定的。
tabindex=正值,表示元素是可聚焦的,並且可以通過鍵盤導航來訪問到該元素;它的相對順序按照tabindex 的數值遞增而滯后獲焦。如果多個元素擁有相同的 tabindex,它們的相對順序按照他們在當前DOM中的先后順序決定。
根據鍵盤序列導航的順序,值為 0 、非法值、或者沒有 tabindex 值的元素應該放置在 tabindex 值為正值的元素后面。
如果我們在
上設置了 tabindex 屬性,它的子元素內容不能使用箭頭鍵來滾動,除非我們在內容上也設置 tabindex。注:tabindex 的最大值不應超過 32767。如果沒有指定,它的默認值為 -1。
相關連接:
https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/tabindex;
https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/tabIndex