網站首頁 編程語言 正文
前言
在瀏覽器中表單元素天然支持focus和blur事件,這兩個事件在開發過程中出現的頻率還是挺高的,前端開發者也都比較熟悉,在這里特意總結一下。
觸發場景
- 鼠標點擊
- 鍵盤tab鍵
- 直接調用dom的focus,blur方法
使用tabIndex使非表單元素支持focus和blur事件
給一個普通的div元素增加tabIndex屬性后,這個元素就能支持focus和blur事件了。可以設置tabIndex為-1,這樣元素既可以被focus,同時不會被鍵盤訪問到。
<div id="d1" tabindex="-1"> 1111 </div> <script> const d1 = document.querySelector('#d1'); d1.addEventListener('focus', function () { console.log('d1 focus') // 會觸發focus }) </script>
不支持冒泡
下面的例子中我們期待focus<input />
的時候會觸發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') // 不會觸發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') // 會觸發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') // 會觸發focus } inputFocus=()=>{ console.log('input focus') // 會觸發focus } render() { return <div onFocus={this.focus} > react <input onFocus={this.inputFocus} /> </div> } } window.onload = function () { ReactDOM.render(<App />, document.querySelector('#root')) } </script>
原文鏈接:https://www.cnblogs.com/walkermag/p/16900330.html
相關推薦
- 2023-02-05 前端面試學習中幾個常見有用的知識點_經驗交流
- 2022-03-30 Android實現靜音檢測功能_Android
- 2022-10-05 Iptables防火墻四表五鏈概念及使用技巧詳解_安全相關
- 2022-05-29 ASP.NET?Core全局異常處理_實用技巧
- 2021-12-05 使用VS2022在ASP.NET?Core中構建輕量級服務_實用技巧
- 2022-09-09 C#流程控制詳解_C#教程
- 2022-08-10 Oracle數據庫如何使用exp和imp方式導數據_oracle
- 2022-12-26 C++逆向分析移除鏈表元素實現方法詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支