微信小程序实现bindtap等事件传参


Posted in Javascript onApril 08, 2019

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

什么是事件

事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。

事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

事件对象可以携带额外信息,如 id, dataset, touches。

微信小程序实现bindtap等事件传参

微信小程序实现bindtap等事件传参

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

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

wxml

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

JS

Page({
 tapName: function(event) {
 console.log(event)
 }
})

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

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

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

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

说明

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

PS:小程序 view使用bindtap传值问题

如图,view标签 加 bindtap事件,用data-name传值,如果view中只有文字,点击整个view区域都可以接收到data-name的值,如果view里面加一个lable标签,那么点击lable包裹的区域,data-name取不到值。  解决方法:把取值方式  由e.target.dataset.carrierName  修改为e.currentTarget.dataset.carrierName即可

微信小程序实现bindtap等事件传参

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
JAVASCRIPT  THIS详解 面向对象
Mar 25 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
javascript中this做事件参数相关问题解答
Mar 17 Javascript
jQuery简单图表peity.js使用示例
May 02 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
Vue实现选择城市功能
May 27 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
js原生方法被覆盖,从新赋值原生的方法
Jan 02 Javascript
在VUE style中使用data中的变量的方法
Jun 19 Javascript
详解vue中axios请求的封装
Apr 08 #Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 #Javascript
vue+element+Java实现批量删除功能
Apr 08 #Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 #Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 #Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 #Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 #Javascript
You might like
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
Koa项目搭建过程详细记录
2018/04/12 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python中的super用法详解
2015/05/28 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Django中的Model操作表的实现
2018/07/24 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
写给女生的道歉信
2014/01/08 职场文书
澳大利亚商务邀请函
2014/01/17 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
领导干部对照检查材料
2014/08/24 职场文书
考试保密承诺书
2014/08/30 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
教师听课学习心得体会
2016/01/15 职场文书
银行工作心得体会范文
2016/01/23 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技