微信小程序实现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中ajax学习笔记3
Oct 16 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
jQuery实用基础超详细介绍
Apr 11 Javascript
javascript获取隐藏dom的宽高 具体实现
Jul 14 Javascript
javascript从image转换为base64位编码的String
Jul 29 Javascript
JS脚本实现动态给标签控件添加事件的方法
Jun 02 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
详解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/09/20 PHP
php 保留小数点
2009/04/21 PHP
php中对2个数组相加的函数
2011/06/24 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
php解析url的三个示例
2014/01/20 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
对javascript继承的理解
2016/10/11 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
js实现select下拉框选择
2020/01/11 Javascript
使用python实现生成用户信息
2017/03/20 Python
Python List cmp()知识点总结
2019/02/18 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
python 实现识别图片上的数字
2019/07/30 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
写好自荐信的几个要点
2013/12/26 职场文书
工作失职检讨书范文
2014/01/16 职场文书
工作失职检讨书
2015/01/26 职场文书
公诉意见书范文
2015/06/05 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python