小程序点击事件阻止冒泡处理

博客探讨了在小程序中遇到的点击事件冒泡问题,导致点击view内的image元素时,页面会重复跳转。解决方案涉及到小程序事件的冒泡和非冒泡事件机制,通过理解文档中关于事件绑定的细节来阻止事件冒泡。

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

代码:

<view id='5' class='home-menu'  bindtap='toRouter'>
  <image id='5' bindtap='toRouter' src='../../assets/icon/m3.png'></image>
  <view class='t-c'>时间</view>
</view>

这个时候会出现一种情况,当我点击view时,他会跳转到指定页面,当我点击view里面的image时,他会跳转2遍指定页面,第一反应就是当年做的第一个前端项目出现了新的认知,事件冒泡。
除了那次后来都没碰见过,今天在小程序遇到了。
解决方法:

//父元素不变
<view id='5' class='home-menu'  bindtap='toRouter'>     
    //子元素事件改为catchtap绑定
  <image id='5' catchtap='toRouter' src='../../assets/icon/m3.png'></image>
  <view class='t-c'>时间</view>
</view>

当初把小程序文档粗略看了一遍,知道事件绑定为bindtap就没仔细看相关的后续,
在小程序中事件分为冒泡事件非冒泡事件
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
其中有一行字单独说明了:

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

soso~

### 如何在微信小程序阻止事件冒泡 在微信小程序中,传统的 `event.stopPropagation()` 和 `event.preventDefault()` 方法并不适用,因为这些方法主要用于 Vue 或 React 等框架,在微信小程序中的实现方式有所不同。 为了有效阻止事件冒泡,推荐使用 `catchtap` 替代 `bindtap` 来绑定点击事件。具体来说: - **`bindtap`**: 此属性允许事件正常触发并继续向上传播给父级元素。 - **`catchtap`**: 使用此属性可立即停止事件传播至任何上级节点[^2]。 #### 实战代码演练示例:阻止事件冒泡 下面是一个简单的例子来展示如何通过改变事件处理器的方式防止不必要的事件冒泡现象发生: ```html <!-- WXML 文件 --> <view class="parent" bindtap="handleParentTap"> Parent View <view class="child" catchtap="handleChildTap"> <!-- 注意这用了 catchtap 而不是 bindtap --> Child View </view> </view> ``` ```javascript // JS 文件 Page({ handleParentTap(e) { console.log('Parent tapped'); }, handleChildTap(e) { console.log('Child tapped, but parent will not receive this event.'); } }) ``` 在这个案例,当用户点击子视图(`.child`)时只会触发对应的处理函数而不会影响到其父容器(`.parent`)上的监听器;反之如果改回成 `bindtap`, 则两个级别的回调都会被执行. 值得注意的是,并非所有的内置组件都支持冒泡行为,默认情况下像 `<button>` 这样的控件产生的交互动作是非冒泡类型的,因此无需特别考虑它们之间的相互干扰问题[^4]. 另外需要注意一些特殊情况下的配置项设置不当也可能引起意外的冒泡效果,比如页面下拉刷新功能未被禁用的情况下即使调用了相应的 API 接口也无法完全抑制默认操作的发生[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值