React antd Select 无法在disabled状态下选择并复制输入框内的内容情况分析及解决方案

2023-09-21 15:52:13

背景

在React项目开发中,我们经常会用到antd内的Select组件。有时候我们会在disabled状态使用Select。这个时候我们偶尔会想要复制到Select内的这个输入框里面的内容。但是会发现无法复制。
我这边使用的是antd4

请添加图片描述在这里插入图片描述

问题分析

出现了无法复制的情况,那么我们就要进行问题的分析
首先,通过打开控制台的方式,来看这个Select的Dom是怎么样的

在这里插入图片描述

我们通过控制台可以看到,antd的Select实现并非传统的使用原生select来改动,而是自己通过div和span通过代码组合来组装成的组件。

解决思路一:会不会是由于在选择框内hover的时候出现的那个图标导致的

于是,就直接在element内改动样式,去掉这个玩意
众所周知,一般这种图标,鼠标置于某处,鼠标的样式是由cursor这个东西决定的

在这里插入图片描述

去掉之后,果然还是不行

解决思路二:会不会是这个span禁止复制

从我们所学到的知识来看,禁止一个span被复制,我们可以使用css来处理,也就是在 这个span上加上一段css

<span style={{ userSelect: 'none'}}>不可以被复制的文字</span>

这一段代码加上,就会让span无法被复制

在这里插入图片描述

一看,果然有。但是去掉之后,还是不行

但是去掉之后还是不行,心碎思密达

解决思路三:去看看antd具体实现

遇事不决,去看源码
在这里插入图片描述
一顿框框的看之后,意识到了问题的所在,我们想要复制的是span的内容,但是在他的上层有一层div,我们关于的鼠标事件就被div遮盖了。所以,我们需要将鼠标事件,穿透到span上触发。

最终解决方案

在这里插入图片描述

pointer-events:none 的作用:
阻止用户的点击动作产生任何效果
阻止缺省鼠标指针的显示
阻止CSS里的 hover 和 active 状态的变化触发事件
阻止JavaScript点击动作触发的事件

mdn的解释的再解释:(中翻中了属于是)
pointer-events:none——元素不再是鼠标事件的目标,鼠标不再监听当前层而去监听下面的层中的元素。但是如果它的子元素设置了pointer-events为其它值,比如auto(默认值),鼠标还是会监听这个子元素的。

更通俗的说法是,pointer-events:none作用是让元素实体“虚化”。例如一个应用pointer-events:none的按钮元素,则我们在页面上看到的这个按钮,只是一个虚幻的影子而已,您可以理解为海市蜃楼,幽灵的躯体。当我们用手触碰它的时候可以轻易地没有任何感觉地从中穿过去。一切都是幻影!

在这里插入图片描述
只需要在Select使用处,加上样式 pointer-events:none。然后重写这个antd的样式即可解决这个问题。

其他版本的解决方案

antd3.*

这个版本直接用div套div的方式
在这里插入图片描述
还是同理,修改这两处即可。

antd5.*

在这里插入图片描述

更多推荐

华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

目录一、题目描述二、输入描述三、输出描述样例:输出样例:四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、再输入5、再说明6、如果走后一次请求的是20,会怎么样呢?华为OD机试2023B卷题库疯狂收录中,刷题点这里一、题目描述请实现一个简易内存池,根据请求命令完成内存分配和释放。内存池支持两种操作

Shiro【散列算法、Shiro会话、退出登录 、权限表设计、注解配置鉴权 】(五)-全面详解(学习总结---从入门到深化)

目录Shiro认证_散列算法Shiro认证_过滤器Shiro认证_获取认证数据Shiro认证_Shiro会话Shiro认证_会话管理器Shiro认证_退出登录Shiro认证_RememberMeShiro授权_权限表设计Shiro授权_数据库查询权限Shiro授权_在Realm进行授权Shiro授权_过滤器配置鉴权Sh

轻量服务器2核与1核的区别

​1.核心数量轻量服务器2核与1核最明显的区别在于核心数量。1核服务器只有一个处理器核心,而2核服务器有两个处理器核心。这使得2核服务器在处理数据时能够同时执行更多的任务。2.并行处理能力由于只有1个核心,1核服务器不具备并行处理任务的能力。而2核服务器在处理数据时可以同时执行多个任务,提高了服务器的处理速度和效率。3

GitLab数据迁移后出现500错误

一、背景去年做GitLab数据迁移时,写过一篇文章《GitLab的备份与还原》。后来发现新创建的项目没问题,但对于迁移过来的项目,修改名称等信息,或者删除该项目时,会出现500错误,以为是系统问题,一直也查到解决办法。二、原因前段时间再次搜索解决办法,终于解决了,在这里记录一下。导致这样的原因,了解到是db_key_b

辅助驾驶功能开发-功能规范篇(21)-3-XP行泊一体方案功能规范

XPilotParking自动泊车系统七、全自动泊车(AutoParking)•自动泊车辅助(AutoParkingAssist)、斜列式车位泊车辅助(DiagonalAutoParkingAssist)-产品定义基于超声波传感器和环视摄像头对空间和车位的识别,通过自动泊车系统实现全自动泊车入库。-功能说明当车辆以不高

前端杂记1

React是基于函数式编程的运行时框架,UI=fn(state),它的状态改变是通过发布订阅模式,单向数据流方式,更新是通过运行时diff,然后将变化的部分渲染,而vue是通过响应式以组件为颗粒进行更新,因此它可以在预编译阶段进行动静态标记来优化更新比较过程reactscheduler会将组件根据优先级划分成更小颗粒的

Vue全局事件总线

1.简介全局事件总线时一种组件间通信的方式,适用于任意组件间通信2.原理分析:如果A组件想要传递数据给B组件,那么就通过全局事件总线在B组件中绑定一个自定义事件,并界定一个参数来接收传递的数据,在A组件中,就需要通过全局事件总线对自定义事件进行触发,并传递参数简单理解:全局事件总线其实就是一个中间介质,组件间的相互通信

flex弹性盒模型与阿里图标的使用

华子目录flex布局flex布局原理flex使用三要素阿里图标(字体)flex布局相关学习网站:http://c.biancheng.net/css3/flex.html1.flex是当前最主流的布局方式:用它布局起来更方便,取代了浮动的作用。2.浮动布局有缺陷,会脱离文档流,可能会导致布局崩塌注:用flex布局的元素

SQL中LIKE和REGEXP简单对比

一、在SQL中,LIKE和REGEXP是用于模式匹配的两种不同语法。它们用于在数据库查询中匹配符合特定模式的字符串。1.LIKE是SQL中用于模糊匹配的运算符,它使用通配符%来表示任意个数字符序列(包括空字符序列)的位置。例如:SELECT*FROMtable_nameWHEREcolumn_nameLIKE'AA%'

Dubbo可以代替Feign、Hystrix、Sentinel,Ribbon?

文章目录一、概念二、功能介绍1、@Service2、@Reference3、@Method4、@Argument三、分析四、如何实现?1、熔断(CircuitBreaker)XML配置方式注解方式2、降级(Fallback)XML配置方式注解方式3、限流(RateLimiting)XML配置方式注解方式4、负载均衡(L

华为云云耀云服务器L实例评测|华为云上安装kafka

文章目录华为云云耀云服务器L实例评测|华为云上安装kafka一、kafka介绍二、华为云主机准备三、kafka安装1.安装什么版本java2.安装zookeeper服务3.使用systemctl管理启动ZooKeeper服务4.修改kafka配置5.使用systemctl管理启动kafka服务6.创建一个测试topic

热文推荐