孤酒读雨—个人网站

小程序下,bindtap和catchtap的使用区别

作者: Fred

学习微信小程序的第n+1天


今天在学习小程序开发的时候,遇到一个小bug,也是得花一点时间才去解决的。


首先,我做了一个轮播图效果,如下图,点击右上角返回本周按钮可以跳回最后一个轮播图页



代码如下:

<swiper-item style="background:#FCFCFC;" class="movie" wx:for="{{movie_detail}}">

<view class="vv" bindtap="mov_det" data-movie-id="{{item.id}}">

<image style="width:100%;height:450rpx;border-radius:3%;" src="{{item.imgPath}}"></image>

<text>第{{index+1}}周:{{item.author}}</text>

<text>点评:{{item.comment}}</text>

<text wx:if="{{item.isTrue}}" style="font-size:16px;color:red;">强烈推荐</text>

<button wx:if="{{index<movie_detail.length-1}}" class="btn" bindtap="btnn">返回本周</button>

</view>

</swiper-item>


然后,我做了详情页,我希望点击当前轮播图可以进入到对应的详情页,所以,在整个卡片的view里面加了bindtap事件


这时,bug出现了,当我这时候点击返回本周按钮后,会跳到详情页,这是为什么呢?


这是事件绑定和事件冒泡导致的。


因为我在view里面还有一个button也是绑定了bindtap事件。


而bindtap是会冒泡的,就是button先调用了当前绑定的btn方法,然后向上冒泡,再去执行mov_det方法


这时候,就达不到我预期的效果了,那该怎么办?


在小程序中,绑定事件并不仅仅是bindtap,我们还可以使用catchtap


catchtap,不会进行冒泡,它会阻止冒泡,阻止当前事件向上冒泡,这样的话在它执行完当前事件后就结束了,不会再去执行外面的view里面所绑定的事件


微信小程序的冒泡机制,还是很有趣的