小程序中bindtap绑定事件传值的bug

bindtap点击事件

事件中可以通过data- 来绑定一些值然后点击的时候再 e 里面获取,e为事件对象,可以携带额外信息,如 id, dataset, touches。
e.target和e.currentTarget的区别(做项目时发现的店bug)
如果只绑定在图片或者按钮上获取得到的值是一模一样的。但是如果绑定在view中里面还存在子元素就会出现问题。

<view class="guige" data-index="{{index}}" bindtap="guigeClick">
	<text class="color">选择规格</text>
	<text>{{item.listGuige.color[item.listGuige.cindex]}},{{item.listGuige.zhongliang[item.listGuige.zindex]}}{{item.listGuige.size[item.listGuige.sindex]}}</text>
	<image src="/static/arrow.png" mode="heightFix" style="height:24rpx;"></image>
</view>
// 编辑规格
 guigeClick:function(e){
   let that = this;
   console.log("data-index值:",e.currentTarget.dataset.index)
   console.log("data-index值:",e.target.dataset.index)
   console.log("listGuige:",that.data.list)
   let list = that.data.list[e.target.dataset.index].listGuige;
	that.choiceGuige = that.selectComponent("#choiceGuige");
	that.choiceGuige.guige(list); //向组件中传值
	that.choiceGuige.showDialog();
},

当点击整个view中的空白处不会有问题,但是点击到任何子元素身上就会获取不到e.target.dataset.index,里面是空的。e.currentTarget.dataset.index则不会有问题

e.target指向的是添加监听事件的对象,明显当点击子元素没有绑定该事件,故报错
e.currentTarget 是指向触发事件监听的对象,此时点击子元还是父元素,都是当前事件,应用e.currentTarget。
总结“添加(注册)监听事件”的对象与“触发事件监听”的对象是不一样的!前者指绑定了事件,如:bindtap、catchtap,后者是能够触发该事件但没有绑定事件。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷眸同学(waim)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值