赞
踩
事件绑定的写法和组件属性一致,以key="value"的形式,其中:
小程序中事件分为冒泡事件和非冒泡事件。
示例引用自:(3条消息) 微信小程序bind事件和catch事件区别_xiaoqiang_0719的博客-CSDN博客_微信小程序catch
本文以冒泡事件tap(手指触摸后马上离开,也就是点击事件)为例子来区别bind和catch事件。
假如有三个view点击事件都是用的bindtap,三个view是层级包含关系
.wxml文件:
- <view id="outer" bindtap="out">
-
- outer view
-
- <view id="middle" bindtap="middle">
-
- middle view
-
- <view id="inner" bindtap="inner">
-
- inner view
-
- </view>
-
- </view>
-
- </view>
.js 文件:
- out:function(e){
-
- console.log("--out bindtap click")
-
- }, middle: function (e) {
-
- console.log("--middle bindtap click")
-
- }, inner: function (e) {
-
- console.log("--inner bindtap click")
-
- }
点击out view打印出一条log ,--out bindtap click
点击middle view打印出两条log, --middle bindtap click --out bindtap click
点击innew view打印出三条log,--inner bindtap click --middle bindtap click --out bindtap click
可以看出bindtap不阻止向上冒泡,所以点击inner一直冒泡到了最外层。
如果我们只修改 middle view的bindtap为catchtap
点击out view打印出一条log ,--out bindtap click (因为没有上层元素故而无法向上冒泡)
点击middle view打印出一条log, --middle bindtap click (catchtap阻止向上冒泡)
点击innew view打印出两条log,--inner bindtap click --middle bindtap click (catchtap阻止向上冒泡)
事件传递有两种方式:冒泡与捕获。事件传递定义了元素事件触发的顺序。
如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。冒泡:由内及外。
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。
在bind 、catch之前加capture表示捕获阶段。故,有:
示例:
在下面的代码中,点击 inner view 会依次调用handleTap2、handleTap4、handleTap3、handleTap1。
解析:
- <view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2">
- outer view
- <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
- inner view
- </view>
- </view>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。