Element UI 的 el-input组件触发 blur事件

在 Vue 中使用 Element UI 的 el-input组件触发 blur事件时,需结合 Vue 的事件监听机制和 Element UI 的组件特性。以下是具体实现方式和注意事项:


一、直接绑定 @blur事件

el-input组件支持直接通过 @blur监听失焦事件,当输入框失去焦点时触发。

示例代码:

复制代码
<template>
  <el-input
    v-model="inputValue"
    @blur="handleBlur"
    placeholder="请输入内容"
  />
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleBlur(event) {
      console.log('输入框失焦,当前值:', this.inputValue);
      // 可在此处添加校验、提交等逻辑
    }
  }
};
</script>

说明:

  • @blur是 Vue 的事件监听指令,直接绑定到 el-input组件上。

  • 事件回调参数 event包含原生 DOM 事件对象,可通过 event.target.value获取输入值。


二、通过 ref手动触发失焦

若需通过代码主动触发失焦(如回车键触发),需结合 ref获取组件实例并调用原生 blur()方法。

示例代码:

复制代码
<template>
  <el-input
    ref="inputRef"
    v-model="inputValue"
    @keyup.enter.native="handleEnter"
    placeholder="按回车失焦"
  />
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleEnter() {
      // 通过 ref 获取组件实例,调用原生 blur()
      this.$refs.inputRef.$el.querySelector('input').blur();
    }
  }
};
</script>

说明:

  • 使用 .native修饰符监听原生 keyup.enter事件(因 el-input是自定义组件)。

  • 通过 this.$refs.inputRef.$el.querySelector('input')定位到内部的 <input>元素,调用 blur()方法触发失焦。


三、与表单校验结合

在 Element UI 的表单校验中,blur事件是触发校验的关键。

示例代码:

复制代码
<template>
  <el-form :model="form" :rules="rules" ref="formRef">
    <el-form-item label="名称" prop="name">
      <el-input
        v-model="form.name"
        @blur="handleBlur"
        placeholder="请输入名称"
      />
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      form: { name: '' },
      rules: {
        name: [
          { required: true, message: '名称不能为空', trigger: 'blur' }
        ]
      }
    };
  },
  methods: {
    handleBlur() {
      this.$refs.formRef.validateField('name'); // 手动触发校验
    }
  }
};
</script>

说明:

  • 表单校验默认在 blur事件触发时执行(需在 rules中设置 trigger: 'blur')。

  • 可通过 this.$refs.formRef.validateField()手动触发校验。


四、注意事项

  1. 事件冒泡问题​

    • 若 el-input内部嵌套其他组件(如 el-select),需确保事件绑定在正确的元素上。

    • 使用 .native修饰符时,仅对原生 DOM 事件有效。

  2. 异步校验​

    • 若校验逻辑涉及异步操作(如 API 请求),需在 handleBlur方法中返回 Promise 或使用 async/await。
  3. 性能优化​

    • 避免在 blur事件中执行复杂计算或频繁的 DOM 操作,可使用防抖(Debounce)减少触发频率。

五、扩展场景

1. 自定义失焦逻辑

通过 @blur传递自定义参数:

复制代码
<el-input
  v-model="inputValue"
  @blur="(event) => handleBlur(event, 'customParam')"
/>
2. 防抖处理

使用 Lodash 的 _.debounce优化频繁触发:

复制代码
import _ from 'lodash';
export default {
  methods: {
    handleBlur: _.debounce(function(event) {
      // 防抖后的逻辑
    }, 300)
  }
};

通过上述方法,可灵活控制 el-input的失焦行为,适用于表单提交、实时校验、搜索联想等场景。

相关推荐
哎哟喂呢哈8 分钟前
VedioJS 10
javascript·html5
夏幻灵8 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
三天不学习9 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
xcs194059 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
雪芽蓝域zzs13 小时前
第 5 节:Marker 点击弹出 InfoWindow 信息窗口
vue.js
小宋102115 小时前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
大包子15 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
lerhxx15 小时前
AI 应用中的上下文管理 —— 从"上下文窗口"到"分层压缩"的工程实践
前端·javascript
雪芽蓝域zzs16 小时前
第 3 节:地图点击事件,点击获取经纬度
vue.js
Mahut16 小时前
我在 Mac 上做了个本地剪辑器
javascript·架构·产品