【前端vue】 复制 选中 文本如何不触发点击事件

在特定业务场景中,单纯添加点击事件会使选中文本时触发点击事件,如在table里点击流水号弹出订单详情且要复制流水号。解决方案是在点击事件中判断是否有选中文本,未选中则弹出弹窗,选中则不操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在某些特定的业务场景,既需要通过点击文本弹出详情,又要可以选中文本进行复制,但是单纯添加点击事件,在选中文本时也会触发点击事件

 如下例 在table中 点击流水号 弹出订单详情 ,但是还要可以复制流水号

<el-table-column
    prop="serialNumber"
    show-overflow-tooltip
    label="流水号"
    min-width="170">
  <template slot-scope="scope">
    <el-link type="primary"  @click="orderInfo(scope.row)">{{scope.row.serialNumber}}</el-link>
  </template>
</el-table-column>

解决方案:

只需要在点击事件中判断当前是否有选中文本, 如果未选中文本就执行弹出弹窗,选中则不做任何操作

    orderInfo(row){
      if (window.getSelection().toString() === '') {
        this.orderInfo = row;
        this.dialogOrderInfo = true;
      }
    },

### Vue3 实现选中文本复制到剪贴板功能 在 Vue3 中实现选中内容并将其复制到剪贴板的功能,可以通过原生 JavaScript 的 `navigator.clipboard` API 或者借助第三方库来完成。以下是基于原生方法的一个具体实现方式。 #### 使用原生 Clipboard API 实现 通过监听用户的鼠标事件捕获选中文本,并调用 `writeText` 方法将选中内容写入剪贴板。 ```javascript <template> <div @mouseup="handleCopy"> 这是一段可以被选中复制内容。尝试选中这段文字触发复制操作。 </div> </template> <script> import { ref } from 'vue'; export default { setup() { const handleCopy = async () => { try { // 获取当前页面上用户选中文本 const selectedText = window.getSelection().toString(); if (selectedText.trim()) { // 调用 Clipboard API 将选中文本写入剪贴板 await navigator.clipboard.writeText(selectedText); console.log('已复制:', selectedText); // 提示信息可根据需求调整 } } catch (error) { console.error('无法访问剪贴板', error); } }; return { handleCopy, }; }, }; </script> ``` 上述代码实现了当用户选中一段文本后松开鼠标时自动触发复制行为[^2]。需要注意的是,为了安全起见,现代浏览器通常只允许在用户交互(如点击或按键)的情况下访问剪贴板数据。 #### 利用第三方插件 vue-clipboard2 如果希望简化逻辑或者增强跨平台支持率,则可以选择引入专门用于处理剪切板事务的工具包——例如 **vue-clipboard2** 。尽管此例子针对 Vue2 设计,但在适当配置下同样适用于 Vue3 环境[^3]。 首先需安装依赖项: ```bash npm install --save vue-clipboard2 ``` 接着修改应用入口文件以注册全局指令: ```javascript // main.js import VueClipboard from 'vue-clipboard2'; app.use(VueClipboard); ``` 最后,在模板内部定义绑定点即可: ```html <button v-clipboard:copy="'要复制内容'" v-clipboard:success="onCopySuccess" v-clipboard:error="onCopyError">一键复制</button> ``` 其中回调函数分别用来报告成功与否的状态更新消息给前端界面显示出来供反馈用户体验优化之用[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值