微信小程序实现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 相关文章推荐
jquery 插件开发备注
Aug 27 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
基于daterangepicker日历插件使用参数注意的问题
Aug 10 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
Vue实现购物车详情页面的方法
Aug 20 Javascript
微信小程序实现上传图片裁剪图片过程解析
Aug 22 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
原生js实现下拉选项卡
Nov 27 Javascript
javascript操作向表格中动态加载数据
Aug 27 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制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
Python入门之modf()方法的使用
2015/05/15 Python
django反向解析和正向解析的方式
2018/06/05 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
聚网科技C++面试笔试题
2015/09/01 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
少先队活动总结
2014/08/29 职场文书
党支部书记岗位职责
2015/02/15 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL