微信小程序bind:tap与bindtap与catch:tap区别
在微信小程序中,bind:tap、bindtap 和 catch:tap 都是绑定点击事件的方式,它们的主要区别在于事件冒泡和命名方式。
1️⃣ bindtap 和 bind:tap
✅ 作用:两者是等价的,都是绑定事件,并且允许事件冒泡。
✅ 区别:
bindtap是 简写 形式,推荐使用。bind:tap是 完整写法,但较少使用。
示例
<view bindtap="handleTap">点击我</view>
<!-- 等价于 -->
<view bind:tap="handleTap">点击我</view>
Page({
handleTap() {
console.log("点击事件触发");
}
});
2️⃣ catch:tap
🚫 作用:catch:tap 绑定事件但阻止事件冒泡,即不会向父级元素传递事件。
示例
<view bindtap="parentTap" style="background: lightgray; padding: 20px;">
<view catch:tap="childTap" style="background: white; padding: 10px;">点击我</view>
</view>
Page({
parentTap() {
console.log("父级元素被点击");
},
childTap() {
console.log("子级元素被点击");
}
});
点击结果
| 点击对象 | 控制台输出 |
|---|---|
点击子元素 (<view catch:tap="childTap">) |
子级元素被点击(父级不会触发) |
点击父元素 (<view bindtap="parentTap">) |
父级元素被点击 |
🔹 catch:tap 阻止了事件冒泡,所以点击子元素时不会触发父元素的 bindtap。
3️⃣ 总结
| 绑定方式 | 是否允许事件冒泡 | 适用场景 |
|---|---|---|
bindtap / bind:tap |
✅ 允许 | 默认使用,点击子元素会触发父元素的 bindtap |
catch:tap |
❌ 阻止 | 阻止事件冒泡,点击子元素时不触发父元素事件 |
👉 什么时候用 catch:tap?
- 例如,在
modal(弹窗)中,点击背景关闭弹窗,但点击内容区不关闭:
<view bindtap="closeModal" class="modal-background">
<view catch:tap="stopPropagation" class="modal-content">
这里是弹窗内容
</view>
</view>
Page({
closeModal() {
console.log("关闭弹窗");
},
stopPropagation() {
console.log("点击内容区,不触发关闭");
}
});
🚀 这样点击弹窗内容不会关闭,但点击背景会触发 closeModal 关闭弹窗! 🎯

浙公网安备 33010602011771号