您当前的位置:首页 > 网站建设笔记 >

事件对象event.target和event.currentTarget

0
<view>
  <swiper catchtap="onSwiperTap" vertical="{{false}}" indicator-dots="true" autoplay="true" interval="5000" circular="true">
    <swiper-item><image src="20180714.jpg" mode="aspectFill" data-post-id="1" /></swiper-item>
    <swiper-item><image src="20180714.jpg" mode="aspectFill" data-post-id="2" /></swiper-item>
    <swiper-item><image src="20180714.jpg" mode="aspectFill" data-post-id="3" /></swiper-item>
  </swiper>
</view>
onSwiperTap:function(event){
  var postId=event.target.dataset.postId;
    wx.navigateTo({
    url:"post-detail/post-detail?id="+postId
  });
}

在冒泡事件中,target指的是事件最开始被触发的元素,而currentTarget指的是捕获事件的元素。放在以上的代码中,target指的是image元素,而currentTarget指的是swiper元素。点击swiper时实际上点击的是image组件,事件由image一级一级地传递到swiper组件中,最后被我们注册在swiper组件上的onSwiperTap捕获。只有在image元素上才设置有postId,从currentTarget(swiper)元素中是无法获取到postId的,所以必须使用event.target来获取postId。

在微信小程序的开发过程中,有时需要获取事件发生时的一些信息,例如事件类型、事件发生的时间、触发事件的对象等,此时可以通过事件对象来获取。当事件处理函数被调用时,微信小程序会将事件对象以参数的形式传给事件处理函数。事件对象的属性如下表所示。

属性类型说明
typestring事件类型
timeStampnumber事件生成的时间戳
targetobject触发事件的组件的一些属性值集合
currentTargetobject当前组件的一些属性值集合
markobject事件标记数据

对于初学者来说,事件对象属性中的target和currentTarget较难理解。target表示获取触发事件的组件的一些属性值集合;而currentTarget表示获取当前组件的一些属性值集合。下面通过案例来演示事件对象属性中target和currentTarget的区别。

<view bindtap="viewtap" id="outer">
  outer
  <view id="inner">
    inner
  </view>
</view>
viewtap:function(e){
  console.log(e.target.id+"-"+e.currentTarget.id);
}

在上述代码中,父元素outer绑定了viewtap()事件处理函数,而子元素没有绑定,但是由于子元素是父元素的一部分,因此点击子元素也会触发viewtap()事件处理函数。运行程序测试,当单击outer时,控制台中的输出结果为outer-outer,而单击inner时,控制台中的输出结果为inner-outer。由此可见,e.target获取的是子元素的属性值集合,而e.currentTarget获取的是父元素的属性值集合。

建站咨询

在线咨询真诚为您提供专业解答服务

咨询热线

137 1731 25507×24小时服务热线

微信交流

二维码终于等到你,还好我没放弃
返回顶部