当前位置: 首页 > news >正文

vue2 element-ui 中 el-radio 单选框点击事件失效问题

前情提要

点进这篇文章的小伙伴,应该和博主一样,都是遇到了这种单选框可点击取消的需求。也就只有这种不同寻常的需求,才能让我们发现element框架的缺陷点,话不多说,下面博主来提供一个解决思路。

@click为什么无法触发

其实很简单,在vue中有一条规则,@函数 在自定义组件上使用时,监听的是该组件内部触发的自定义事件方法,所以当我们对组件使用 @click 方法时,就需要组件在内部设置一个 $emit(‘click’) 触发,我们观察下图el-redio的源码,可以发现其未对 click 函数进行绑定
在这里插入图片描述
这也就是为什么 el-radioclick事件无效,就是因为在el-radio组件内部并未监听 click 方法,所以我们的事件失效了。而在 element-ui 组件中大部分组件都对 click 进行处理了,所以出现无法点击的问题,我们第一时间都是怀疑自己哪调错了。

使用 @click.native 触发方式解决

知道了原因,我们选择正确的方法就行,小伙伴们还记得在 vue 中出现的事件修饰符吗,其中一个 vue2 特有的修饰符 .native 刚好满足我们的要求,它的作用就是专门用于监听组件根元素的原生的事件

vue2特有修饰符说明
.native监听组件根元素的原生事件
.sync双向绑定语法糖 (Vue 3 中已被 v-model 参数替代)

接着我们把代码中原本的 @click 改为 @click.native 并对元素进行一个判断,因为事件会向下捕获,我们进行一个元素名判断防止误触发,接着进行 setTimeout 延后处理,因为要取消功能必须保证click函数延后触发,不然会和单选框本身的选中逻辑有冲突,调整完成后我们可以尝试一下功能是否生效,

<template><el-radio v-model="select" :label="id" @click.native="select_Click($event,id)" />
</template>
<script>// methods 函数中select_Click(event, value) {// 处理点击元素if (event.target.tagName === 'INPUT') { return }const old = this.select // 记录一个过去值,防止判断出错setTimeout(() => {if (old === value) {this.select = ''}}, 0)}
</script>

完整演示示例

<template><el-radio v-model="select" :label="id" @click.native="select_Click($event,id)" />
</template>
<script>
export default {data() {return {id:1,select:''}    },methods:{select_Click(event, value) {// 处理点击元素if (event.target.tagName === 'INPUT') { return }const old = this.select // 记录一个过去值,防止判断出错setTimeout(() => {if (old === value) {this.select = ''// 如果 el-radio 嵌套层级深可增加// this.$forceUpdate()}}, 0)}    }
}
</script>

相关文章:

  • 士兵乱斗(贪心)
  • 大数吞小数
  • SDL基础
  • MCP理解笔记及deepseek使用MCP案例介绍
  • 探索鸡养殖虚拟仿真实验:科技赋能养殖新体验
  • 重工业数字化转型
  • TAS启动与卸载
  • 单片机 | 基于51单片机的倾角测量系统设计
  • Flow 笔记
  • 什么是cnas认证?认证cnas证书有什么好处?
  • 《基于神经网络实现手写数字分类》
  • 用最简单的方式了解单例模式
  • PDF多功能转换编辑及扫描仪 iLovePDF 3.10.0
  • 【verilog】多个 if 控制同一个变量 是否不是标准的语言规范,标准的语言规范应该如何写?
  • 在时间的缝隙里雕刻故事:龙臻的影像语言与全球认可
  • opencv图片颜色识别
  • 【linux模块化编译驱动Makefile异常引发的惨案】
  • 方案精读:华为数字化转型实践案例合集【附全文阅读】
  • 关于Diamond机械手的运动学与动力学的推导
  • Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 演员黄晓明、金世佳进入上海戏剧学院2025年博士研究生复试名单
  • 英媒:英国首相住所起火,目前无人伤亡
  • 季子文化与江南文化的根脉探寻与融合
  • 27岁杨阳拟任苏木镇党委副职,系2020年内蒙古自治区选调生
  • 第12届警博会在即:一批便民利企装备亮相,规模创历史新高