之前一直以为微信小程序按钮点击事件传参是和web端相同,即在事件中写明所传递的参数即可,但是这样尝试过以后发现小程序的控制台报错,报所写的bindtap中参数错误,之后百度发现,小程序按钮点击这类事件时一般的处理方法是指明元素所在的id,bindtap只是写明函数名,例如,bindtap='setNumber',而不是bindtap='setNumber(1)',在js中只要写function(e).通过e可以获取所传过来元素的所有信息。

以下是我所百度的资料。

什么是事件

事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。 
事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。 
事件对象可以携带额外信息,如 id, dataset, touches。

看图,因为需要传递的数据比较多,所以我们通过dataset携带参数信息。如果只有一个参数,可以通过id来传递

详解(以常见的tap点击事情为例)

wxml

<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
  • 1

JS

Page({tapName: function(event) {console.log(event)}
})
  • 1
  • 2
  • 3
  • 4
  • 5

event 打印结果

{
"type":"tap",
"timeStamp":895,
/////////////////////////////////
"target": {"id": "tapTest","dataset":  {"hi":"WeChat"}
},
"currentTarget":  {"id": "tapTest","dataset": {"hi":"WeChat"}
},
///////////////////////////////
"detail": {"x":53,"y":14
},
"touches":[{"identifier":0,"pageX":53,"pageY":14,"clientX":53,"clientY":14
}],
"changedTouches":[{"identifier":0,"pageX":53,"pageY":14,"clientX":53,"clientY":14
}]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

注意两点:

1、data-名称 不能有大写字母,如果需要,可以通过 - (中划线)来连接单词,编译的时候小程序会将第二个单词首字母自动大写。图中代码是为了自己标志,所以第二个单词的首字母大写了,其实可以不用。data-* 属性中不可以存放对象。

2、注意打印结果中target和currentTarget的区别。

target 触发事件的源组件。 
currentTarget 事件绑定的当前组件。

如果你在父容器上绑定了事件并传参,当你点击父容器时,事件绑定的组件和触发事件的源组件是同一个元素,所以currentTarget 、target 都可以拿到参数,但是当你点击子元素时,target 就不是事件绑定的组件了,所以拿不到参数。 
由于事件冒泡的机制,父容器上绑定的事件依然可以触发,所以currentTarget 依然可以拿到参数。

说明

id传参和dataset类似,只是最后获取值的时候不同。event.currentTarget.id

微信小程序之bindtap事件传参相关推荐

  1. 微信小程序——点击事件传参没有数据(undefined)

    今天在wxml和js传参的时候,为了和后台的命名规则保持一致,在data-questionId的驼峰式命名,结果发现参数传到js的时候,js打印出来为undefined.今天把这个坑填了! 微信开发者 ...

  2. 微信小程序 - 点击事件传参

    首先给某个按钮或者某个组件 添加 bindtap点击事件 再加上 data-xxx="传值内容" (xxx可以自定义单词) 例如: //xx.wxml <view bindt ...

  3. 微信小程序 页面导航、传参、接收参数

    页面导航指的是页面之间的相互跳转,在微信小程序中,页面导航分为如下两种: 1.声明式导航: 在页面上声明一个<navigator>导航组件 通过点击<navigator>导航组 ...

  4. 微信小程序开发之页面传参

    这 传参主要是三种: 1.简单值传参如:id=1,string = asdfg之类,其中字符不包含特殊字符如?.=之类 2.含特殊字符传参如一个地址http://r.photo.store.qq.co ...

  5. 微信小程序的bindtap事件

    在微信小程序中,要想获取元素的属性值,需要用到 bindtap事件,如果想要正确获取到属性值,对属性的命名还有一定要求 如下是正确的方式data-money-Num="9.93": ...

  6. 小程序中点击事件传参

    小程序是事件驱动型的,小程序可以使用点击事件传递参数: 代码如下: // wxml文件 <view class="container"> <view class= ...

  7. 微信小程序6 - 页面之间传参及通知系统封装

    1. 简单传参 wx.navigateTo({ url: '/pages/demo/index/index?id=1' }) /pages/demo/index/index.js 中 onLoad(o ...

  8. 解决微信小程序跳转页面传参有特殊字符。

    传参的时候转换JSON,另一边接收会因为特殊字符而报错. 解决方法: 传参的时候用encodeURIComponent进行编码 let arr=encodeURIComponent(JSON.stri ...

  9. 微信小程序之bindtap事件绑定传参

    wxml代码: <view class='fen'><text bindtap='prev' data-page="{{pageDang}}">上一页< ...

最新文章

  1. 金蝶应收应付模块流程_金蝶KIS专业版应收应付的系统亮点功能
  2. python魔法方法详解
  3. 畅享9能更新鸿蒙吗,Mate 9也能升级!鸿蒙系统正式发布:老用户爽了
  4. html width设置没用,html style的width不起作用
  5. Assembly.Load动态加载程序集而不占用文件
  6. ZOJ 3792 Romantic Value 最小割(最小费用下最小边数)
  7. join为什么每个字符都分割了 js_js如何截取以逗号隔开的字符串
  8. 十进制到二进制的转换
  9. java正则表达式 and_Java正则表达式详解
  10. winrara注册文件
  11. IPv4到IPv6的改造转换方案(上):IPv6和IPv4优势对比
  12. 星星之火-45:5G技术地图
  13. [JZOJ4567]nekopara
  14. vnc桌面手机版,推荐5款好用的vnc桌面手机版软件
  15. 小博老师解析经典Java面试题-redirect和forward的区别
  16. arcsde93安装好了之后,配置连接sde库失败, 提示st_domain_methods报错
  17. linux7.4修改密码,Centos7.4 修改Root密码
  18. java超级记事本_使用java实现记事本(超详细解释)
  19. 如何监控文件已成功通过EDI系统发给客户(一)-邮件通知
  20. PHP 页面跳转到另一个页面的多种方法方法总结

热门文章

  1. 【干货+源码】树莓派实现车牌识别检测系统
  2. 技术动态 | 「新一代知识图谱关键技术」最新2022进展综述
  3. 专业级mac数据恢复软件—Easyrecovery
  4. 抖音视频内容如何被快速推荐的几种方法:国仁楠哥
  5. 解决pc游戏启动报错3005 Error 30005: Create File Failed With 32
  6. 手机海豚模拟器怎么添加游戏_小忍计划模拟器手机版游戏下载-小忍计划模拟器手机版游戏v0.1.9.3...
  7. finalize 方法
  8. win10系统怎么切换独立显卡
  9. 不用看网课就能学到python的文章(第一天)
  10. 移动端web解决方案