vue项目中click事件不执行——v-for中的key

一、现象

      今天被一个神奇的bug困扰了一天。

      在vue项目中,页面有一个input在获得焦点的状态下(失去焦点时会触发事件和数据变化),此时单击一个绑定click事件的元素,click事件不执行,只有在input失去焦点后,第二次单击时,才会执行click事件。

二、代码

      绑定click事件的元素代码简化如下:

<p v-for="(element,index) in levelFields" @click="changeLayerFn(index)" :key="Math.random()">
    <b>{{element.aliasName}}</b>
</p>

三、解决过程及原因分析

      由于项目中代码复杂度很高,经过层层注释和简化,最终发现,当注释掉上面代码中的“:key”时,click事件可以正常执行了。究其原因,第一次点击时,首先触发了input的blur方法,导致数据发生了变化。

      我们来看一下官方对key的解释

      由于被点击元素的key值是随机数,当数据变化时,key值变了,所以元素被重新渲染了。原来接受click的元素已经不存在了,所以click事情也没有执行了。

      最后把key的值设置为index,问题就解决了,不知道当初为啥要用random了?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]:在使用vue-seamless-scroll做页面自动滚动的时候,在添加点击事件后发现在滚动到第二遍的时候点击事件消失。最后发现是由于vue-seamless-scroll在实现滚动的时候自行复制了一份DOM,导致在复制的DOM出现的时候点击事件消失。\[1\] 问题:vue-seamless-scroll事件丢失 回答: 当使用vue-seamless-scroll进行页面自动滚动时,可能会遇到点击事件丢失的问题。这是因为vue-seamless-scroll在实现滚动时会复制一份DOM,导致复制的DOM出现时点击事件消失。为了解决这个问题,可以尝试以下方法: 1. 在vue-seamless-scroll组件上添加一个唯一的key属性,例如:key="scrollKey"。这样可以确保每次滚动时都会重新渲染组件,从而避免事件丢失。 2. 可以尝试使用vue-seamless-scroll提供的其他配置选项来解决事件丢失的问题。例如,可以设置hoverStop为false,这样鼠标悬停时滚动不会停止,可能可以避免事件丢失。 3. 如果以上方法都无效,可以考虑使用其他滚动插件或自己实现滚动功能来替代vue-seamless-scroll。 希望以上方法能够帮助您解决vue-seamless-scroll事件丢失的问题。\[1\] #### 引用[.reference_title] - *1* [vue——vue-seamless-scroll点击事件消失的问题](https://blog.csdn.net/qq_45997679/article/details/115835681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue-seamless-scroll列表循环滚动插件](https://blog.csdn.net/weixin_42215897/article/details/110194641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值