微信小程序开发点击事件影响父级元素(阻止事件冒泡)

<button type="primary" bind:tap="click">123</button>

只需将bind改为catch就可以阻止事件冒泡,点击子元素影响父元素的问题。

<button type="primary" catch:tap="click">123</button>

与 bind 不同, catch 会阻止事件向上冒泡。

### 微信小程序冒泡事件的参数传递机制 在微信小程序中,事件冒泡是一种常见的行为模式,允许子组件触发的事件沿着 DOM 树向上传递给组件。这种机制可以通过 `bind` 和 `catch` 关键字来控制事件的行为以及参数的传递。 #### 1. **事件冒泡的基础** 事件冒泡是指当一个子节点上的事件被触发时,该事件会依次传播到其所有的祖先节点上[^1]。如果希望某个特定事件影响当前节点而不向上冒泡,则可以使用 `catch` 来捕获并停止事件进一步传播。 #### 2. **参数传递的方式** 在微信小程序中,事件对象通常携带了一个名为 `detail` 的属性,用于存储自定义数据。开发者可以在 WXML 中通过设置 `data-*` 属性或者直接绑定动态变量的形式,在事件发生时将这些数据作为参数传递给处理函数。 以下是具体的实现方式: - 使用 `data-*` 自定义属性: 可以在标签内添加类似于 HTML5 的 `data-*` 数据集属性,并将其赋值为字符串或其他简单类型的值。 - 动态绑定表达式: 如果需要更复杂的逻辑运算或模型驱动的数据流管理,可以直接利用 Mustache 表达式的语法 `${}` 把 JavaScript 对象成员嵌入模板之中。 #### 3. **代码示例** 下面是一个完整的例子展示如何在一个按钮点击事件中通过冒泡机制完成跨层次间的信息交换过程: ```html <!-- index.wxml --> <view bindtap="handleParentEvent"> Parent View <button catchtap="handleChildEvent" data-id="childButton">Click Me</button> </view> ``` ```javascript // index.js Page({ handleParentEvent(e) { console.log('Parent Event Triggered:', e.detail); }, handleChildEvent(e) { const id = e.currentTarget.dataset.id; this.triggerEvent('customBubble', { messageId: 'Message from child' }, {}); // 向外抛出自定义事件 // 或者手动构造 detail 并重新分发新的事件供上监听器消费 let newDetail = Object.assign({}, e.detail, { customDataField: true }); wx.event.dispatch(this, 'bubbleUpward', newDetail); return false; // 阻断后续默认动作链路执行路径 } }); ``` 上述案例展示了两个层面的操作——子控件内部先做局部响应再主动发起新一轮带有额外负载的消息广播;与此同时由于采用了 `catchtap` 而不是普通的 `bindtap` ,所以能够有效抑制不必要的二次触碰反馈现象出现。 #### 4. **注意事项** 需要注意的是,尽管 Vue 等框架支持 `.stopPropagation()` 方法用来显式终止事件扩散链条,但在微信小程序环境下并不适用此 API 。取而代之的做法就是采用前述提到过的基于关键字区分策略(`bind vs catch`)来进行精细化调控[^2]。 另外提醒一点关于性能优化方面的小技巧:尽量减少无谓的深层结构布局设计以免造成过多冗余计算开销从而拖慢整体渲染速度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值