如何在vue项目中给ul>li列表使用事件委托

Vue实现点击li后变色 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <titl. 阅读详情
ul>
    <li v-for="(item, index) in data" @click="handleClick(index)">
        Click Me
    </li>
</ul>

然后这样的话,结果就是所有的li元素都绑定了事件。

我们都知道,过多的事件对于性能来说是很糟糕的,尤其在移动端,可以说是无法容忍。为了更好的解决这个性能问题,我们在这里要引入一个事件委托(又叫事件代理)的概念。即子不教父子过,子债父偿......

我们可以通过在li元素中额外加一个data-index就可以实现委托啦~

<body>
  <div id="app">
    <my-component></my-component>
  </div>
  
  <script src="./vue.js"></script>
  <script>
    let component = {
      template: `
        <ul @click="handleClick">
          <li v-for="(item, index) in data" :data-index="index">
            {{ item.text }}
          </li>
        </ul>
      `,
      data() {
        return {
          data: [
            {
              id: 0,
              text: '0',
            },
            {
              id: 1,
              text: '1',
            },
            {
              id: 2,
              text: '2',
            }
          ]
        }
      },
      methods: {
        handleClick(e) {
          // 注意一定要过滤掉ul,不然会出问题
          if (e.target.nodeName.toLowerCase() === 'li') {
            const index = parseInt(e.target.dataset.index)
            // 获得引索后,只需要修改data数据就能改变UI了
            this.doSomething(index)
          }
        },
        doSomething(index) {
          // do what you want
          alert(index)
        }
      }
    }

    new Vue({
      el: '#app',
      components: {
        'my-component': component
      }
    })
  </script>
</body>

 

Vue之事件绑定(初识Vue事件) Vue 的事件绑定是指通过 Vue 提供的v-on指令来监听 DOM 事件,当特定事件被触发时执行相应的方法或表达式。事件绑定在 Vue 中是一种重要的交互机制,它使得开发者可以轻松地响应用户的交互行为,并进行相应的逻辑处理。当在 Vue 中使用事件绑定时,通常会使用v-on或简写形式来监听 DOM 事件,并在触发事件时执行相应的方法。监听事件:使用v-on指令来监听 DOM 事件,语法为v-on:event,其中event是要监听的事件名,例如clickmouseover等。也可以使用简写形式。 阅读详情

相关推荐

用74LS194和555定时器DIY流水灯:一个经典的数字电路课程设计复盘(附Multisim仿真文件)

本文详细介绍了使用74LS194移位寄存器和555定时器搭建八路彩灯控制器的完整过程,包括硬件选型、电路设计、调试技巧及常见问题解决方案。作为经典的数字电路课程设计,该项目涵盖了EDA工具应用、电路原理图设计和Multisim仿真等核心技能,适合电子工程学习者实践参考。

weixin_29185199的博客 427

vue2使用ul,li实现下拉列表

用组件库的时候样式修改起来又很麻烦,原声下拉列表options又无法添加样式,也没法做复杂处理,所以使用以下方式实现下拉列表 下拉,收起的icon自行更换 <template> <div > <div class='team-list'> <div class='team-name' @click='nameClick()'> <div>{{message}} &lt

Leviathan_gy的博客 1827

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 257

vue滚动页面到一定距离(ul--li)

vue滚动页面到一定距离(ul--li)

qq_51196135的博客 1541

保姆级教程:用VESTA软件5分钟搞定纳米颗粒Wulff Construction建模(以Au金为例)

本文提供了一份详细的VESTA软件教程,指导用户如何在5分钟内完成纳米颗粒Wulff Construction建模,特别以金(Au)为例。从环境搭建、基础晶体结构创建到Wulff Construction设置和可视化优化,涵盖了全流程操作步骤和常见问题解决方案,适合科研新手快速上手。

weixin_29311017的博客 436

sap销售发货的流程_SAP销售订单发货后如何实现发票的自动创建?

问SAP销售订单发货后如何实现发票的自动创建?答业务场景有些快消零售企业,SAP系统单据量大,单据金额少,一般在销售发货后即可确认收入。此时无需人工在系统内操作VF01或者VF04进行开票操作,可将该操作设置成后台作业进行自动批量开票,具体操作如下:1、定义任务:VF06输入完以上信息,点击保存进入以下界面:说明:当前日期的意思是“开票的日期”等于“系统电脑中的当前日期”当前日期+/-...

weixin_42358409的博客 3366

vue利用事件委托实现按钮互斥,并传递对应的值

效果如下: 事件委托:也称事件代理 原理:事件委托就是利用事件冒泡,指定一个事件处理程序,就可以管理这一类型的所有事件。 应用场景:我有一个ul标签,下面有很多li标签,每个li标签都需要添加事件,难道我们要获取每个li然后在添加事件吗? 这样太浪费内存了,也不利于网页性能优化,我们要尽可能减少dom操作,所以我们能不能只给ul添加点击事件,然后利用事件冒泡,这样每个li标签都有事件了. 效果的...

qq_40544291的博客 1857

告别安装报错!保姆级教程:用阿狸狗破戒大师V3.2.6搞定Cadence 17.4完整安装与补丁

本文提供Cadence 17.4的完整安装与破解教程,特别针对国内用户常见问题优化。从前期准备、镜像处理到阿狸狗破戒大师V3.2.6的智能破解,再到补丁管理与性能调优,详细指导每一步操作,确保一次性安装成功并提升设计效率。

weixin_30632089的博客 838

vue操作ul中的li,让每个v-show独立互不干扰

Vue的ul中的li互不干扰 问题描述 在做项目的时候,使用vue的v-for循环遍历每一个对象,并给每一个对象绑定事件,但是点击事件的时候,所有元素互相干扰,我做的是回复评论部分,点一下,所有评论的回复框都出来了,很麻烦 解决方案 ...

qq_43054210的博客 2562

本地化搭建DeepSeek+RAGFlow,构建个人知识库

本地化搭建DeepSeek+RAGFlow,构建个人知识库。至少32G以上内存、500G以上空余磁盘空间。

gogospecter的专栏 7428

通信算法之283:大疆DJI云哨系统-DJI DroneID物理层协议-解速率匹配及Turbo译码

3. 完整云哨接收机,接收灵敏度。交流: 1279682290 ,2. Turbo译码模块。1. 解速率匹配模块。

leegang12的专栏 868

vue中用 ul 和 li 仿轮播图,可以播放图片和视频 ,亲测可用

话不多说,直接上代码 ( css部分省略 ) <!-- 此处是控制轮播图轮播的图片 --> <img src="@/assets/img/leftBtn.png" alt="" @click="leftMove(index)" class="leftBtn" /> <img src="@/assets/img/rightBtn.png" alt="" @click="rightMove(index)" class="right

qq_40137978的博客 1493

AI + 药物临床试验研发赛道

研究日期:2026-07-09 | 研究主题:AI + 药物临床试验研发赛道 | 聚焦岗位:Agent 平台架构师 / AI 工程架构师。

AI天才研究院 146

vue 事件委托

Vue 添加事件的方式很方便,在标签元素上以@click=“fnName” 的形式填加就好,而且还有 .stop 、.prevent 、.self 等修饰符,简单好用。 但是如果li非常多呢?给列表上每个li都添加点击事件是不是不太好? li 添加click <template> <ul> <li class="li" v-for="(m,i) in 5" :key="i" @click="itemFn(m)"></li> </ul

拿回忆下酒 1723

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue超简单的数据绑定

Vue的声明式编程 在传统的编程中,我们编程是命令式编程,也就是一步一步一行一行写代码,然后执行,就像下面: <script> var value = document.getElemenyById("apple").value; document.getElemenyById("applevalue") = value; </script> 然后呢,在vue中,编程通常为声明式编程,那什么是声明式编程呢?举个如下的例子: 声明式编程本质是语法层面的封装,看起来像是声明

Sobered的博客 970

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Vue(三)——数据绑定

数据绑定 简单文本绑定 最简单也是最常用的数据绑定方法,通过使用{{}}标签来绑定数据: var app = new Vue({ el : '#app', data : { name: 'hengyumo' } }) <span>Hello, this is {{name}}</span> --> Hello, this is hengyumo 通过app...

衡与墨的博客 9446

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

vue中事件代理的使用

vue事件代理

qq_33404590的博客 1908

Vue绑定自定义属性data, 并且获取数据

data。

小火车况且况且况且的博客 2075

对动态生成的ul-li进行点击事件并更改其样式

1、点击动态的ul-li,给被点击的添加颜色 $(this).addClass(“active”).siblings().removeClass(“active”) ,siblings()是监听除该元素的同级元素

yangzixiansheng的博客 1411

VUE 花路之iview(一)

iview4如何把form表单里的input输入框和点击输入框之后的边框去掉? 这行代码就可以了 ps: 那个小手是鼠标的那个小手 .ivu-input { border: 0; cursor: pointer; // 小手 } .ivu-input:focus { border:none; box-shadow: 0 0 0 2px transparent; // 这个是去除标签的...

嫣子的博客 362

Vue中点击ul获取具体是点击的哪一个li

需求描述 项目是基于Vue的,想要实现的功能是: 1、点击ul就知道具体是哪一个li在点击 2、不给li绑定点击事件,只给ul绑定点击事件,因为li很多,一个个给li绑定事件比较麻烦 3、通过知道是点击的哪一个li,进而进行跳转 项目特殊 这个项目中,li标签下面还嵌套了两个标签,分别是img标签和span标签。后面会说到li嵌套和不嵌套对解决这个问题的影响。 <li> <img src="..." alt="" /> <span>message</span&g

qq_43114230的博客 8335

Vue (十五) --------- UI 组件库

vue UI组件库简介

在森林里麋了鹿 1274

VUE循环列表中的item点击事件

在子组件中抛出事件,传入button特定的item属性 父组件自定义事件,然后通过switch来区分button 如上,即可给循环列表中的item添加事件,本人小白,大牛轻虐,多多交流!

u014717791的博客 2348

Vue------循环多个ul与li,给li增加点击事件增加class不影响其他的li

问题描述 如下图一所示循环了三个div,且每个div中又分辨循环了多个span,给span绑定了点击事件,当点击时其他div里面的class.on也会跟着点击的那个移动,如图二所示。 ...

pppp皮卡丘的博客 1万+

(vue)点击li获取其值:

(vue)点击li获取其值

nyf_unknow的博客 3587

js事件委托 点击ul获取到里面所有li 不再单独for循环

js事件委托 点击ul获取到里面所有li 不再单独给每个li进行for循环遍历

爬楼梯的前端小白的博客 2187
上一篇: 如何使用react脚手架构建项目
下一篇: 防止暴力点击(节流)
春风欲雨
博客等级 码龄7年 68粉丝 106原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值