当前位置: 首页 > 知识库问答 >
问题:

前端 - ElementUI el-input组件suffix插槽点击事件focus不触发blur原因分析?

姜博
2024-03-14


elementui的el-input组件的源码中,suffix插槽绑定了一个点击事件@click="focus",focus事件中没有做其他的处理,只是点击的时候获取input焦点,会触发focus事件。如果当前的input处于已经获取焦点的状态,应该会先触发input的blur事件,再触发focus事件。

但是为什么没有触发blur事件呢?

共有1个答案

闾丘京
2024-03-14

ElementUI 的 el-input 组件在处理 suffix 插槽的点击事件时,确实会触发 focus 事件以使 input 获取焦点。然而,你提到的 blur 事件没有触发的问题,可能涉及到浏览器的事件处理机制以及 ElementUI 的内部实现。

  1. 事件冒泡与默认行为:在 DOM 中,点击事件会冒泡到父元素。如果 suffix 插槽的元素(通常是一个按钮或其他可点击元素)被点击,它的点击事件会首先触发,然后冒泡到 el-input 组件。ElementUI 的实现可能阻止了 blur 事件的默认行为或取消了事件的冒泡,从而避免了在触发 focus 事件之前先触发 blur 事件。
  2. ElementUI 的内部实现:ElementUI 可能会对 el-input 组件进行了一些特殊处理,以优化用户体验或修复某些浏览器的不一致行为。这种内部实现可能包括在点击 suffix 插槽时直接设置 input 的焦点,而不是通过触发 focus 事件。这种情况下,blur 事件可能就不会被触发。
  3. 浏览器的差异:不同的浏览器在处理焦点和模糊事件时可能有细微的差异。某些浏览器可能不会在点击已经聚焦的 input 元素内部的元素时触发 blur 事件。

要确切了解为什么 blur 事件没有触发,你可能需要查看 ElementUI 的相关源码或文档,以了解它是如何处理这些事件的。同时,也可以尝试在不同的浏览器和环境中测试你的代码,以观察是否存在一致的行为。

 类似资料:
  • 如图:el-select使用文档提供的focus事件和blur事件,当focus的时候执行blur,使其失去焦点收起下拉面板。但是执行了blur事件后,触发了2次focus,想问问原因,如何解决 业务需求是:点击下拉框的时候,根据条件判断是否要展开下拉面板,不用el-select的disabled禁止,所以用以上方式实现,但是有触发2个的问题

  • 问题内容: 当输入框处于焦点状态时,不会调用该函数。 我包含在文件中,它是在 jQuery是v1.10.2版和Angular.js是v1.0.7版之前。 可能会发生什么? 问题答案: ngFocus在Angular 1.0.7上不可用。在Angular 1.2上可用。 您可以创建自己的ngFocus指令,这非常简单,请在此处查看: https://gist.github.com/eliotsyke

  • 问题内容: 我的页面上有一个超链接。我正在尝试自动执行对超链接的多次单击,以进行测试。有什么方法可以使用JavaScript模拟超链接的50次点击? 我正在寻找JavaScript中的onClick事件触发器。 问题答案: 单击HTML元素: 只需执行。大多数主流浏览器都支持此功能。 要多次重复单击: 将ID添加到元素以唯一地选择它: 并通过for循环在JavaScript代码中调用该方法:

  • 本文向大家介绍vue父组件点击触发子组件事件的实例讲解,包括了vue父组件点击触发子组件事件的实例讲解的使用技巧和注意事项,需要的朋友参考一下 最近在学习Vue父子组件通信的问题,刚好遇到一个父子之间事件事件派发与接收,在这里记录一下,在这里我使用的是ref 给子组件注册引用信息。官网是这样解释的 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通

  • 本文向大家介绍javascript/jquery实现点击触发事件的方法分析,包括了javascript/jquery实现点击触发事件的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript/jquery实现点击触发事件的方法。分享给大家供大家参考,具体如下: 点击事件 原声态 和 jquery 感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具

  • 问题内容: 考虑以下代码段: 现在,假设外部div有一个与之关联的活动对象。我如何确保在内部任何地方都不会触发直播? 编辑: 这是要求的JS 单击“ .inner-div”时不应触发此操作 问题答案: 您必须向内部子级添加事件侦听器,并取消事件的传播。 在普通JS中,类似 要么