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

quasar中@click.stop没有生效,点击按钮时候会跳转

如果 @click.stop 没有生效,按钮点击后仍然导致 q-item 的跳转,可能是事件传播的问题或其他配置干扰导致。下面是正确处理的方式,确保点击按钮不会触发 q-item 的默认跳转行为。


修正方案

  1. 使用 @click.native.stop
    Quasar 的组件可能会将事件包裹在自己的处理逻辑中,直接使用 @click.stop 可能无法拦截事件。可以试试添加 .native 修饰符来直接监听原生 DOM 的事件。

    修改按钮的代码如下:

    <q-btn
      flat
      icon="content_copy"
      color="primary"
      @click.native.stop="copyToClipboard(item.link)"
    />
    

    这里的 .native 修饰符确保点击事件是绑定到原生 DOM 元素,而不是 Quasar 组件的事件系统。


  1. 使用 prevent 代替默认行为
    在按钮的 @click 中调用 event.preventDefault()event.stopPropagation()

    <q-btn
      flat
      icon="content_copy"
      color="primary"
      @click="handleCopyClick($event, item.link)"
    />
    

    对应的 methods 中处理逻辑:

    methods: {
      handleCopyClick(event, link) {
        event.preventDefault(); // 阻止默认行为(如跳转)
        event.stopPropagation(); // 阻止事件冒泡到父组件
        this.copyToClipboard(link); // 执行复制逻辑
      },
    },
    

  1. q-item 中移除点击事件的继承
    确保按钮不会被 q-item 的点击逻辑覆盖。Quasar 的 q-item 默认将所有子元素的点击事件传递到父组件。

    你可以通过以下方式阻止这种传递:

    • q-item 上添加 @click 和条件判断,只有当点击事件不来自子组件时,才触发跳转逻辑。
    <q-item
      v-for="(item, index) in navigationItems"
      :key="index"
      clickable
      tag="a"
      :href="item.link"
      target="_blank"
      @click="handleItemClick"
    >
      <q-item-section>
        <div class="text-h6">{{ item.title }}</div>
        <div class="text-subtitle2 text-grey-6">{{ item.description }}</div>
      </q-item-section>
      <q-item-section side>
        <q-btn
          flat
          icon="content_copy"
          color="primary"
          @click.native.stop="copyToClipboard(item.link)"
        />
      </q-item-section>
    </q-item>
    

    父点击处理方法

    methods: {
      handleItemClick(event) {
        // 如果是按钮区域的点击,阻止跳转
        if (event.target.tagName === 'BUTTON' || event.target.closest('button')) {
          event.preventDefault();
          event.stopPropagation();
        }
      },
    },
    

  1. 调整 q-item 的结构,分离点击逻辑
    如果以上方法仍然无法解决,可以通过手动控制跳转逻辑来彻底分离 q-item 的跳转和按钮行为。

    修改代码如下:

    <q-item clickable @click="openLink(item.link)">
      <q-item-section>
        <div class="text-h6">{{ item.title }}</div>
        <div class="text-subtitle2 text-grey-6">{{ item.description }}</div>
      </q-item-section>
      <q-item-section side>
        <q-btn
          flat
          icon="content_copy"
          color="primary"
          @click.stop="copyToClipboard(item.link)"
        />
      </q-item-section>
    </q-item>
    

    控制跳转的逻辑:

    methods: {
      openLink(link) {
        window.open(link, '_blank'); // 在新标签页中打开链接
      },
      copyToClipboard(link) {
        navigator.clipboard.writeText(link)
          .then(() => {
            this.$q.notify({ message: '复制成功!', color: 'green', icon: 'check' });
          })
          .catch(() => {
            this.$q.notify({ message: '复制失败,请重试', color: 'red', icon: 'error' });
          });
      },
    },
    

    效果

    • 点击整个 q-item 打开链接。
    • 点击按钮时,只执行复制逻辑,跳转被阻止。

总结

  1. 首选 @click.native.stop 来阻止事件冒泡。
  2. 如果不生效,可以手动调用 event.stopPropagation()event.preventDefault()
  3. 必要时,调整 q-item 的结构,将跳转和按钮逻辑彻底分离。

按照以上调整,点击按钮时不会触发 q-item 的跳转事件,同时整个 q-item 仍然可点击跳转链接。


http://www.kler.cn/a/461385.html

相关文章:

  • node.js之---事件循环机制
  • js的一些处理
  • liunx下载gitlab
  • [算法] [leetcode-509] 斐波那契数
  • ThinkPHP 8高效构建Web应用-控制器
  • 《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发
  • 【2024年-9月-29日-开源社区openEuler实践记录】 Euler - Copilot - Framework:开启智能辅助编程新征程
  • Rabbitmq追问1
  • Go语言中值接收者和指针接收者的区别?
  • HTML<select>标签有关的定义和属性
  • 【人工智能机器学习基础篇】——深入详解监督学习之模型评估:掌握评估指标(准确率、精确率、召回率、F1分数等)和交叉验证技术
  • c# Record关键字
  • Github 正常访问但是ping不同也无法进行git操作
  • 通过无障碍服务(AccessibilityService)实现Android设备全局水印显示
  • Docker 搭建 Gogs
  • SpringBoot 实现登录功能
  • 书生·浦语大模型全链路开源体系-第9关 LMDeploy 量化部署进阶实践
  • TB1801D 线性驱动 LED 恒流芯片
  • 苹果系统MacOS下采用ObjectC访问opencv加载图片的一个简单实例
  • Flink的多流转换(分流-侧输出流、合流-union、connect、join)
  • 中华人民共和国网络安全法
  • BOE(京东方)“向新2025”年终媒体智享会落地深圳
  • 关于MCU复位电路的分析与设计
  • Java重要面试名词整理(十二):Netty
  • C++ Brain Teasers: 未指定和实现定义的行为-函数参数的求值顺序
  • 网络安全靶场合集:知识点与功能解析