小程序bindtap事件与冒泡
  XEjeSkb2br30 2023年11月02日 41 0

bindtap就是点击事件

在.wxml文件绑定:

<text id='textId' data-userxxx='100' bindtap='tapMessage'>cilck here</text>

在一个组件的属性上添加bindtap并赋予一个值(一个函数名)

当点击该组件时, 会触发相应的函数执行

在后台.js文件中定义tapMessage函数:

//index.js
Page({
  data: {
    mo: 'Hello World!!',
    userid : '1234',
  },
 
   // 定义函数
  tapMessage: function(event) {
    console.log(event.target.id);       // 可获得
    console.log(event.target.name);     // 无法获得, 通过target只能直接获取id
    console.log(event.target.dataset);  // 要获得其它属性, 需要从dataset(数据集)中获取
    console.log(event.target.dataset.userxxx);  // userxxx为自定义的属性名, 但命名方式为:data-userxxx
  
    // 这里还原使用userXxx
    console.log(event.target.dataset.userXxx);
  }
})

 event封装的是该事件的信息, 如上通过它可得到一些数据

注意一点:

<!-- data-userXxx,这个大写的X要改为-x -->
    <text id='textId' data-user-xxx='100' bindtap='tapMessage'>cilck here</text>

 

自定义数据(data-)中的大写改为 短横线+其小写

取数据时, 去掉data和那些短横线并还原大写 (data-user-xxx  --> userXxx)

 

事件冒泡就是指嵌套事件发生

如果多层标签嵌套, 里层事件发生后, 其外层会相应发生, 如:

<view bindtap='handout'>
    outer
    <view bindtap='handmiddle'>
      middle
      <view bindtap='handinner'>inner</view>
    </view>
  </view>

 

handout: function () {
    console.log("out");
  },
 
  handmiddle: function () {
    console.log("middle");
  },
 
  handinner: function () {
    console.log("inner");
  }

 点击inner三个事件都执行, 点击middlek执行handmiddle和handout, 点击out只执行handout

阻止事件冒泡行为: 将bindtap改为catchtap就行了, 只会触发自身的点击事件

<view bindtap='handout'>
    outer
    <view catchtap='handmiddle'>
      middle
      <view bindtap='handinner'>inner</view>
    </view>
  </view>



需要理解是, 它阻断自身的冒泡行为

如上点击inner, 执行的是handinner和handmiddle两个函数

不管是不是自身触发的点击行为, 传到我这里, 我就将它阻断(不再向上传递)



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  LX1AzY8zEcNR   2023年11月02日   33   0   0 服务器自定义
XEjeSkb2br30