React tabIndex使非表单元素支持focus和blur事件
前言
在浏览器中表单元素天然支持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>以上就是focus blur 事件的详细内容,更多关于focus blur 事件的资料请关注脚本之家其它相关文章!
相关文章
react+react-beautiful-dnd实现代办事项思路详解
这篇文章主要介绍了react+react-beautiful-dnd实现代办事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-06-06
React路由组件传参的三种方式(params、search、state)
本文主要介绍了React路由组件传参的三种方式,主要包括了params、search、state,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-07-07
React Hooks之useDeferredValue钩子用法示例详解
useDeferredValue钩子的主要目的是在React的并发模式中提供更流畅的用户体验,特别是在有高优先级和低优先级更新的情况下,本文主要讲解一些常见的使用场景及其示例2023-09-09
详解Stack Navigator中使用自定义的Render Callback
这篇文章主要为大家介绍了Stack Navigator中使用自定义的Render Callback使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10


最新评论