【2023-09-01】vue中自定义按钮设置disabled属性后,异常触发click事件

news/2025/1/15 18:15:50/

vue中自定义按钮设置disabled属性后,异常触发click事件

项目中自定义按钮,使用a标签实现。设置disabled属性后,点击可以触发click事件。
由于各种原因,项目中并未使用成熟的第三方组件库,例如element-ui,ant-design。大多数组件是自己封装的,部分借鉴了原项目中jQuery、bootstrap实现。

按钮组件源码

列表中需要根据数据中某个变量的值,控制该数据是否可以进行删除操作。代码如下

<a class="btn btn-primary btx-xs" :disabled="_slot.isDelete" @click="deleteFunc(_slot)">删除</a>

当某一条数据中的isDelete为true时,按钮样式为禁用样式,且不能进行删除操作。
但是,此时点击显示禁用效果的按钮时,依然可以发起删除请求!!!

问题原因

首先说明: a标签 是没有disable 属性的 。故在a标签上添加disabled属性是无效的。
为什么按钮展示禁用效果?由于项目中糅合了jQuery和bootstrap的实现,给a标签添加了btn btn-primary btx-xs 类后,就会表现的像button,button是具备disabled的样式的。
所以该自定义的按钮组件添加禁用后,可以显示禁用的效果

解决方案

方案一:调整按钮组件使用的标签,用button替换

替换b标签为button后,即可正常禁用

<button class="btn btn-primary btx-xs" :disabled="_slot.isDelete" @click="deleteFunc(_slot)">删除</button>

方案二:不跳转标签,在删除方法中,添加处理逻辑

在删除方法中,判断isDelete参数是否为true,为true时直接return,不进行后续代码执行

deleteFunc(_row) {if(_row.isDelete) return//正常的删除逻辑...
}

方案三:设置a标签禁用,配合disabled与 pointer-events属性(不推荐)

既然项目中有使用到jQuery和bootstrap的实现,也可以通过jQuery获取对应的DOM元素,然后设置 pointer-events属性。
实现代码大致如下

<a class="btn btn-primary btx-xs custom_btn" :disabled="_slot.isDelete" @click="deleteFunc(_slot)">删除</a>$(".custom_btn").attr("disabled",true); 
$(".custom_btn").css("pointer-events","none");

注意列表中根据返回值不同,会出现按钮禁用与否不同的情况,上述代码可能会将所有的按钮禁用,实际使用时需要注意区别

尾巴

点滴记录,汇聚江河


http://www.ppmy.cn/news/1077966.html

相关文章

2023年信息安全管理与评估(赛项)评分标准第三阶段夺旗挑战CTF(网络安全渗透)

全国职业院校技能大赛 高职组 信息安全管理与评估 &#xff08;赛项&#xff09; 评分标准 第三阶段 夺旗挑战CTF&#xff08;网络安全渗透&#xff09; 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第三阶段赛题&#xff0c;内容包括&#xff1a;夺旗挑战CTF&#xff08…

解决报错:You don‘t have enough free space in /var/cache/apt/archives/.

apt安装package时遇到问题 You don’t have enough free space in /var/cache/apt/archives/. 问题&#xff1a; /var 目录下空间不足&#xff0c;apt下载时没有地方存放缓存文件。 解决方法&#xff1a; 删除部分日志文件&#xff1a; 删除前&#xff1a; sudo du -xh --max…

《Go 语言第一课》课程学习笔记(十四)

接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合&#xff0c;其中&#xff0c;方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…

ChatGPT和大型语言模型(LLM)是什么关系?

参考&#xff1a;https://zhuanlan.zhihu.com/p/615203178 # ChatGPT和大型语言模型(LLM)是什么关系&#xff1f; 参考&#xff1a;https://zhuanlan.zhihu.com/p/622518771 # 什么是LLM大语言模型&#xff1f;Large Language Model&#xff0c;从量变到质变 https://zhuanla…

⛳ 面试题-单例模式会存在线程安全问题吗?

&#x1f38d;目录 ⛳ 面试题-单例模式会存在线程安全问题吗&#xff1f;&#x1f3a8; 一、单例模式-简介&#x1f69c; 二、饿汉式&#x1f43e; 三、懒汉式&#x1f3af; 3.1、懒汉式&#xff1a;在调用 getInstance 的时候才创建对象。&#xff08;线程不安全&#xff09;&…

python 基于http方式与基于redis方式传输摄像头图片数据的实现和对比

目录 0. 需求1. 基于http方式传递图片数据1.1 发送图片数据1.2 接收图片数据并可视化1.3 测试 2. 基于redis方式传递图片数据2.1 发送图片数据2.2 接收图片数据并可视化2.3 测试 3. 对比 0. 需求 在不同进程或者不同语言间传递摄像头图片数据&#xff0c;比如从java实现的代码…

Ubuntu 20.04.5 怎么安装微信

这是我的ubutun版本号 在这个系统装桌面版微信很多功能不健全。搜索了很多方法&#xff0c;这个算是不错的一个法子。 1.添加仓库 首次使用时&#xff0c;你需要运行如下一条命令将移植仓库添加到系统中。 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh 2.应用安装 …

17.看楼房

Description 小张在暑假时间进行了暑期社会调查。调查的内容是楼房的颜色如何影响人们的心情。于是他找到了一个楼房从左到右排成一排的小区&#xff0c;这个小区一共有 栋楼房&#xff0c;每个楼房有一个颜色 和一个高度 。小张调查的内容为每次他站在第 栋楼和第 栋楼之间向…