首页 > 其他分享 >focus blur 事件

focus blur 事件

时间:2022-11-17 18:11:43浏览次数:39  
标签:触发 console log focus 事件 blur d1

前言

在浏览器中表单元素天然支持focus和blur事件,这两个事件在开发过程中出现的频率还是挺高的,前端开发者也都比较熟悉,在这里特意总结一下。

触发场景

  1. 鼠标点击

  2. 键盘tab键

  3. 直接调用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/[email protected]/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>

标签:触发,console,log,focus,事件,blur,d1
From: https://www.cnblogs.com/walkermag/p/16900330.html

相关文章

  • SpringBoot事件监听机制及发布订阅模式详解
    业务需求:用户注册成功之后,系统会给用户发放优惠券,发送邮件,发送短信等操作。作为开发人员,很容易写出如下代码:/***用户注册逻辑**@authorLynch*/@GetMapping(......
  • 绑定事件和环境对象和回调函数
    事件监听,又称为绑定事件事件监听语法:元素对象.addEventListener(`事件类型`,执行函数)什么是事件监听?让程序检测是否有事件发生,一旦有事件触发程序进行运行事件监听三要素......
  • 使用mongodb存储fluentd 事件,报错Mongo::Auth::Unauthorized error="User admin (mech
    一、问题描述 使用fluentd的mongodb插件,将nginx的日志,存储到mongodb数据库中,配置如下: <source>@typetailpath/var/log/nginx/access.logpos_file/var/......
  • 【快应用】小程序转快应用如何阻止事件向上冒泡
    ​ 问题背景:小程序转快应用,在快应用中使用view标签包裹两层,在每层都写了一个点击事件,在点击最里面的一个button按钮的时候会触发所有view标签上绑定的点击事件,该如何处理......
  • 【Azure 云服务】Azure Cloud Service中的错误事件 Error Event(Defrag/Perflib) 解答
    问题描述在AzureCloudService的实例中,收集到各种ErrorEvent内容,本文针对所收集的三种Event进行解析。1:Thisoperationisnotsupportedonthisfilesystem.......
  • XMLDOM对象方法:对象事件
    Ondataavailable事件作  用 此事件会在XML文件有效时被触发。基本语法  此一事件有下面三种处理方式. Inline:<element ondataavailable = handler>;. Event pro......
  • js中的键盘事件
    一.简单的例子html中<textareaid="key"></textarea>js中varkey=document.getElementById("key")//选中textarea后,输出回车键,就会在控制台输出"正在验证"key.on......
  • nodejs中事件循环中的执行顺序
    nodejs事件循环是一个典型的生产者/消费者模型,异步I/O、网络请求等是事件的生产者,源源不断为Node提供不同类型的事件,这些事件被传递到对应的观察者那里,事件循环则从观......
  • 通俗易懂的React事件系统工作原理
    前言React为我们提供了一套虚拟的事件系统,这套虚拟事件系统是如何工作的,笔者对源码做了一次梳理,整理了下面的文档供大家参考。在React事件介绍中介绍了合成事件对象以......
  • 06事件的基本使用
    1.使用v-on:XXX或@xxx绑定事件,其中xxx是事件名;2.事件的回调需要配置在methods对象中,最终会在vm上;3.methods中配置的函数,不要用箭头函数,否则this就不是vm了;4.methods中......