React tabIndex使非表單元素支持focus和blur事件
前言
在瀏覽器中表單元素天然支持focus和blur事件,這兩個事件在開發(fā)過程中出現(xiàn)的頻率還是挺高的,前端開發(fā)者也都比較熟悉,在這里特意總結(jié)一下。
觸發(fā)場景
- 鼠標點擊
- 鍵盤tab鍵
- 直接調(diào)用dom的focus,blur方法
使用tabIndex使非表單元素支持focus和blur事件
給一個普通的div元素增加tabIndex屬性后,這個元素就能支持focus和blur事件了。可以設(shè)置tabIndex為-1,這樣元素既可以被focus,同時不會被鍵盤訪問到。
<div id="d1" tabindex="-1"> 1111 </div> <script> const d1 = document.querySelector('#d1'); d1.addEventListener('focus', function () { console.log('d1 focus') // 會觸發(fā)focus }) </script>
不支持冒泡
下面的例子中我們期待focus<input />
的時候會觸發(fā)div的focus事件,然而事與愿違,原因就是focus事件不支持冒泡
<div id="d1" tabindex="-1"> 原生 <input id="d2" /> 1111 </div> <script> const d1 = document.querySelector('#d1'); d1.addEventListener('focus', function () { console.log('d1 focus') // 不會觸發(fā)focus }) </script>
支持捕獲
<div id="d1" tabindex="-1"> 原生 <input id="d2" /> 1111 </div> <script> const d1 = document.querySelector('#d1'); d1.addEventListener('focus', function () { console.log('d1 focus') // 會觸發(fā)focus }, {capture: true}) </script>
react中的focus和blur支持冒泡
這就很有意思了,原因是react中使用合成事件,自己完成了一套冒泡邏輯。
<div id="root"></div> <script src="https://cdn.bootcdn.net/ajax/libs/react/16.11.0/umd/react.production.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script> <script src="https://unpkg.com/@babel/standalone@7.18.4/babel.min.js"></script> <script type="text/babel"> class App extends React.Component { focus=()=> { console.log('div focus') // 會觸發(fā)focus } inputFocus=()=>{ console.log('input focus') // 會觸發(fā)focus } render() { return <div onFocus={this.focus} > react <input onFocus={this.inputFocus} /> </div> } } window.onload = function () { ReactDOM.render(<App />, document.querySelector('#root')) } </script>
以上就是focus blur 事件的詳細內(nèi)容,更多關(guān)于focus blur 事件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用React hook實現(xiàn)remember me功能
相信大家在使用 React 寫頁面的時候都遇到過完成 Remember me 的需求吧!本文就將這個需求封裝在一個 React hook 中以供后續(xù)的使用,覺得有用的同學可以收藏起來以備不時之需,感興趣的小伙伴跟著小編一起來看看吧2024-04-04React jsx轉(zhuǎn)換與createElement使用超詳細講解
這篇文章主要介紹了React jsx轉(zhuǎn)換與createElement使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-11-11react中的useImperativeHandle()和forwardRef()用法
這篇文章主要介紹了react中的useImperativeHandle()和forwardRef()用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08react同構(gòu)實踐之實現(xiàn)自己的同構(gòu)模板
這篇文章主要介紹了react同構(gòu)實踐之實現(xiàn)自己的同構(gòu)模板,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03antd-react使用Select組件defaultValue踩的坑及解決
這篇文章主要介紹了antd-react使用Select組件defaultValue踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05React ts模式使用http-proxy-middleware代理時訪問報404問題
這篇文章主要介紹了React ts模式使用http-proxy-middleware代理時訪問報404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07React Native 真機斷點調(diào)試+跨域資源加載出錯問題的解決方法
下面小編就為大家分享一篇React Native 真機斷點調(diào)試+跨域資源加載出錯問題的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01