前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)

零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)

作者头像
小白的大数据之旅
发布于 2025-05-16 08:21:01
发布于 2025-05-16 08:21:01
8800
代码可运行
举报
运行总次数:0
代码可运行

WXML 模板语法

事件绑定

什么是事件

在小程序开发中,事件是渲染层(Webview)到逻辑层(JsCore)的通讯方式。简单来说,当用户与小程序界面进行交互时(如点击按钮、滑动页面等),这些交互行为会被捕获并转化为特定的事件。这些事件随后被发送给逻辑层,逻辑层接收到事件后,会根据预定义的回调函数来处理这些事件,并执行相应的业务逻辑。

事件的触发与传递
  1. 触发事件:用户在渲染层与小程序界面进行交互,如点击按钮,这个行为会触发一个事件。
  2. 事件传递:触发的事件会从渲染层被发送到逻辑层。这个过程中,事件携带了触发它的用户行为信息,如点击的位置、点击的元素等。
  3. 逻辑层处理:逻辑层接收到事件后,会根据预定义的回调函数来处理这个事件。回调函数定义了当事件发生时应该执行的操作,这些操作可以是更新界面、调用API等。
小程序中常用的事件

类型

绑定方式

事件描述

tap

bindtap 或 bind:tap

用户点击时触发,适用于按钮、图片等可点击元素

longtap

bindlongtap 或 bind:longtap

用户长按时触发,适用于需要用户长时间按压的场景

touchstart

bindtouchstart 或 bind:touchstart

手指触摸开始时触发

touchmove

bindtouchmove 或 bind:touchmove

手指触摸后移动时触发

touchend

bindtouchend 或 bind:touchend

手指触摸结束时触发

touchcancel

bindtouchcancel 或 bind:touchcancel

手指触摸被打断(如来电)时触发

input

bindinput 或 bind:input

文本框内容改变时触发,常用于获取用户输入的内容

change

bindchange 或 bind:change

组件状态改变时触发,如单选框、复选框、滑动条等组件的值改变

submit

bindsubmit 或 bind:submit

表单提交时触发,常用于收集用户输入的数据

reset

bindreset 或 bind:reset

表单重置时触发,常用于清空表单中的数据

confirm

bindconfirm 或 bind:confirm

弹出框(如模态框)确认按钮被点击时触发

cancel

bindcancel 或 bind:cancel

弹出框(如模态框)取消按钮被点击时触发

scroll

bindscroll 或 bind:scroll

页面或组件滚动时触发,常用于实现滚动监听

swipe

bindswipe 或 bind:swipe

用户快速滑动时触发,常用于实现轮播图等滑动效果

事件对象的属性列表

当事件回调触发的时候,会收到一个事件对象 event,它的详细属性如下

属性名

数据类型

说明

type

string

事件类型

timeStamp

number

触发事件的时间戳

target

object

触发事件的源头组件

currentTarget

object

当前绑定事件处理函数的组件

detail

object

事件的附加数据,根据具体事件类型不同而不同

touches

array

触摸事件时,当前触摸点列表

changedTouches

array

触摸事件时,发生变化的触摸点列表

targetTouches

array

触摸事件时,目标元素上的触摸点列表

其中targetdetail是比较常用的

target 和 currentTarget 的区别

target 是触发该事件的源头组件,而 currentTarget 则是当前事件所绑定的组件。 首先设置了一个view组件,然后在view组件中嵌套了一个button组件,通过bindtap给view组件绑定了一个outerHandler(手指触摸事件)

点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层 view 的 tap 事件处理函数。(也就是说当点击按钮的时候,首先触发按钮的事件,然后会进行扩散,触发view组件的事件) 此时,对于外层的 view 来说:

  • e.target 指向的是触发事件的源头组件,因此,e.target 是内部的按钮组件(也就是说先点击的按钮,先触发的是按钮操作,所以按钮是源头组件)
  • e.currentTarget 指向的是当前正在触发事件的那个组件,因此,e.currentTarget 是当前的 view 组件(因为先触发的button组件,然后再粗发view组件,所有当前正在触发的组件是view组件)
bindtap 的语法格式

在小程序中,不存在 HTML 中的 onclick 鼠标点击事件,而是通过 tap 事件来响应用户的触摸行为。

通过 bindtap,可以为组件绑定 tap 触摸事件,语法如下:

index.wxml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="primary" bindtap="btnTapHandler">按钮</button>

在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event(一般简写成 e) 来接收:

index.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
    btnTapHandler(e){
        console.log(e)
    }
  })

然后再页面上点击按钮,查看Console中捕捉到的事件

捕捉到的事件:

  1. type:
    • 值:“tap”
    • 说明:表示事件类型是点击事件。
  2. timeStamp:
    • 值:13170578
    • 说明:表示事件触发的时间戳,这个值通常用于比较事件的先后顺序。
  3. target:
    • 说明:触发事件的节点对象。
    • 包含字段:
      • id: “”(节点ID,此处为空)
      • offsetLeft: 103(节点相对于其最近的具有定位(positioned)父节点的水平偏移量)
      • offsetTop: 91(节点相对于其最近的具有定位(positioned)父节点的垂直偏移量)
      • dataset: {…}(节点的自定义数据集合)
  4. currentTarget:
    • 说明:绑定事件的当前组件对象。在事件捕获和冒泡阶段,currentTarget始终指向事件绑定的组件,而target指向触发事件的节点。
    • 包含字段与target相同,说明此处事件直接绑定在了触发节点上。
  5. detail:
    • 说明:事件的详细信息。
    • 包含字段:
      • x: 213.66015625(点击事件在组件内的相对X坐标)
      • y: 110.08984375(点击事件在组件内的相对Y坐标)
  6. mark:
    • 值:{}
    • 说明:用于传递一些额外的信息,此处为空。
  7. mut:
    • 值:false
    • 说明:通常用于表示事件是否由用户交互触发,此处表示事件是由用户交互触发的(但这里的命名和常规理解有些出入,常规上应该是true表示由用户触发,具体含义可能依赖于小程序框架的实现)。
  8. changedTouches:
    • 说明:包含了所有触发了当前事件的触摸点(Touch objects)的数组。
    • 包含字段:{…}(具体字段取决于触摸事件的具体实现)
  9. touches:
    • 说明:包含了当前在屏幕上的所有触摸点(Touch objects)的数组。
    • 包含字段:{…}(具体字段取决于触摸事件的具体实现)
  10. _relatedInfo:
    • 说明:这是一个非标准字段,可能是小程序框架或特定组件自定义添加的。
    • 包含字段:
      • anchorTargetText: “按钮”(触发事件的节点文本)
      • anchorRelatedText: “”(与触发事件相关的其他文本,此处为空)
      • anchorTapTime: 1733147444414(触发事件的时间戳,可能是毫秒级时间)
  11. _allowWriteOnly, _requireActive, _userTap:
    • 这些字段可能是框架内部使用的,用于控制事件的处理流程或行为。
在事件处理函数中为 data 中的数据赋值

通过调用 this.setData(dataObject) 方法,可以给页面 data 中的数据重新赋值,示例如下:

index.wxml文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="primary" bindtap="changeC">1</button>
<view class="container">
  <!-- 动态绑定文本 -->
  <text>当前用户名:{{count}}</text>
</view>
  1. 按钮 (<button>):
    • type=“primary”:设置按钮的类型为“primary”,这通常意味着按钮会有一种醒目的样式(如蓝色背景),以突出显示。
    • bindtap=“changeC”:这是一个事件绑定,当用户点击这个按钮时,会触发 changeC 方法。这个方法定义在 index.js 文件中。
  2. 视图容器 (<view>) 和文本 (<text>):
    • <view class="container">:定义了一个类名为 container 的视图容器,用于包裹内部的文本元素。
    • <text>当前用户名:{{count}}</text>:这里使用了数据绑定({{count}}),它会显示 index.js 文件中 data 对象中 count 属性的值。

index.js文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
    data:{
        count:0
    },
    changeC(){
        this.setData({
            count:this.data.count+1
        })
    }
  })
  1. 数据 (data):
    • count: 0:定义了一个名为 count 的数据属性,初始值为 0。这个属性用于存储和显示计数器的值。
  2. 事件处理方法 (changeC):
    • changeC() 方法是一个事件处理函数,当按钮被点击时,这个方法会被调用。
    • this.setData({ count: this.data.count + 1 }):这行代码用于更新 count 的值。setData 方法是小程序提供的用于更新页面数据的方法。这里它将 count 的值增加 1。

在小程序(如微信小程序)的开发中,this.setData({}) 是一个非常重要的方法,它用于更新页面数据并触发页面的重新渲染。

当你调用 this.setData(object) 时,你实际上是在告诉小程序框架:“我想更新这些数据,并且希望页面能够反映出这些变化。

this.data.count表示获取到当前页面上count的值

下面结果图中注意页面上的数字变化,和右下角中的AppData中count的变化

在这里插入图片描述
在这里插入图片描述
事件传参(错误示范)

小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。例如,下面的代码将不能正常工作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="primary" bindtap="btnHandler(666)">事件传参</button>

定义了一个按钮,在按钮中定义了一个点击事件,事件中直接给btnHandler加上括号里面加入了666这个参数,这样是不可以的!小程序会把btnHandler(666)当做事件的名称,不会把括号里面的当成参数

事件传参(正确示范)

可以为组件提供 data-* 自定义属性传参,其中 * 代表的是参数的名字,示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="primary" bindtap="btnHandler" data-age="{{2}}">事件传参</button>

定义了一个按钮(button),设置了一个点击事件,名称为btnHandler,然后定义了一个参数,参数的名称是age,值是2,设置参数的时候使用的是Mustache 语法的格式{{}},如果不使用Mustache 语法的格式那么参数就是字符串的格式,使用了在里面写一个2,那么就是数字格式

事件传参(获取事件参数的值)

在事件处理函数中,通过 event.target.dataset.参数名 即可获取到具体参数的值,示例代码如下:

index.wxml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="primary" bindtap="user_age" data-age="{{2}}">查看年龄</button>

index.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
    user_age(event){
        console.log("获取所有参数:",event.target.dataset)
        console.log("当前用户的年龄是:",event.target.dataset.age)
    }
  })
bindinput 的语法格式

在小程序中,通过 input 事件来响应文本框的输入事件

index.wxml文件 定义一个bindinput,绑定文本框的输入事件,名称为input_username

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input bindinput="input_username"></input>

index.js文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
    input_username(e){
        // e.detail.value 每次都会获取文本框中最新的值
        console.log(e.detail.value)
    }
  })

我先输入一个张,然后输入一个三,然后再输入一个李,然后再输入一个四,可以看到,每次都是获取到最新的输入内容

实现文本框和 data 之间的数据同步
(1)定义数据:

在小程序页面的data对象中,我们需要定义一个属性来存储文本框中的值。这个属性可以是任意名称,但最好能够反映其用途,比如inputValue。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    inputValue: '' // 初始化为空字符串
  }
})
(2)渲染结构:

在WXML文件中,我们使用<input>标签来创建一个文本框,并通过value属性绑定到data对象中的inputValue属性。同时,我们需要为<input>标签添加一个bindinput事件监听器,用于捕获用户的输入事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" value="{{inputValue}}" bindinput="handleInputChange" />

这里,{{inputValue}}是WXML模板语法中的插值表达式,用于将data对象中的inputValue属性值渲染到文本框中。bindinput="handleInputChange"表示当文本框的内容发生变化时,会调用handleInputChange方法来处理这个事件。

(3)美化样式:

虽然这一步不是实现数据同步所必需的,但为了使文本框更加美观,我们可以在WXSS文件中为其添加一些样式。例如,可以设置文本框的宽度、高度、边框、内边距等属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {
  width: 100%;
  height: 40px;
  border: 1px solid #ccc;
  padding: 5px;
  box-sizing: border-box;
}
(4)绑定 input 事件处理函数:

在页面的JavaScript文件中,我们需要定义一个名为handleInputChange的方法来处理bindinput事件。这个方法会接收一个事件对象作为参数,我们可以通过这个对象的detail.value属性来获取文本框中的当前值。然后,我们使用this.setData方法来更新data对象中的inputValue属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    inputValue: ''
  },
  handleInputChange: function(e) {
    this.setData({
      inputValue: e.detail.value
    });
  }
})

在这里,this.setData是一个非常重要的方法,它用于更新页面的数据并触发页面的重新渲染。当我们调用this.setData时,小程序框架会比较新旧数据之间的差异,并只更新那些发生变化的部分,从而提高页面的渲染效率。

(5)结果:

注意看AppData中的内容,变量的值会随着我们的输入实时变化

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序:WXML模板语法
把data中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可。
岳泽以
2023/03/17
2.3K0
微信小程序:WXML模板语法
【小程序】数据和事件绑定和数据同步传参
把data中的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)将变量包起来即可。语法格
陶然同学
2023/02/24
1K0
【小程序】数据和事件绑定和数据同步传参
【微信小程序】事件绑定
事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的形式,反馈到逻辑层进行业务的处理。
hacker707
2022/10/31
1.1K0
【微信小程序】事件绑定
小程序模板语法样式与页面配置
在 data 中定义数据,在 WXML 中使用数据。使用Mustache{{}}语法:
timerring
2023/06/09
7140
小程序模板语法样式与页面配置
【微信小程序】事件传参与数据同步
通过调用this.setData(dataObject)方法,可以给页面data中的数据重新赋值,示例如下:
hacker707
2022/10/31
1.3K0
【微信小程序】事件传参与数据同步
微信小程序【事件绑定】入门一篇就搞定
上述代码就四行,首先是一个 input 输入框,目的是用来输入一些值,同时下面标签就会显示,接着是两个 button 用来分别执行 +1 或者 -1 的操作,最后一个 view 标签就是为了 进行数据输入或变化的回显
BWH_Steven
2020/09/10
2.3K0
微信小程序【事件绑定】入门一篇就搞定
微信小程序零基础入门--->绑定事件
一、demo1.wxml <!-- 1、bindinput为绑定事件,给input表单进行时间的绑定 2、hadnInput为事件名称,事件在js中填写 3、bindtap点击事件 -->
用户5899361
2020/12/07
8140
微信小程序零基础入门--->绑定事件
小程序开发实战项目:构建简易待办事项列表
随着移动互联网的飞速发展,小程序以其便捷性、即用即走的特点,成为了连接用户与服务的重要桥梁。无论是电商平台的购物助手,还是餐饮行业的点餐系统,小程序都在各个领域发挥着巨大的作用。
小白的大数据之旅
2024/12/28
2200
零基础微信小程序开发——WXML 模板语法之条件渲染(保姆级教程+超详细)
wx:if是WXML中用于条件渲染的指令。它可以根据一个布尔值条件来判断是否需要渲染某个元素。
小白的大数据之旅
2025/05/16
1160
零基础微信小程序开发——WXML 模板语法之条件渲染(保姆级教程+超详细)
微信小程序之事件系统
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
1.4K0
微信小程序开发笔记
  因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理。该篇博客主要记录的是在编写微信小程序时使用比较频繁,实用的一些方法和一些基本原理的概括。个人觉得把这些方法掌握好了,开发一个小型的微信小程序那是绰绰有余的啦。当然我这里并没有深入的对一些语言进行详细的概述,纯属个人总结,假如需要详细的微信小程序语法文档请移驾到:[https://developers.weixin.qq.com/miniprogram/dev/]
追逐时光者
2019/08/28
2.1K0
微信小程序开发笔记
微信小程序-零基础入门手册
wx.showLoading(Object object) | 微信开放文档 (qq.com)
打不着的大喇叭
2024/03/11
3590
微信小程序-零基础入门手册
零基础微信小程序开发——页面事件之下拉刷新事件(保姆级教程+超详细)
下拉刷新是移动设备上的一种专有名词和操作方式。它指的是用户通过手指在屏幕上的下拉滑动操作,从而触发页面数据的重新加载。
小白的大数据之旅
2025/01/08
1.2K0
零基础微信小程序开发——页面事件之下拉刷新事件(保姆级教程+超详细)
小程序 | 10-事件
小程序需要经常和用户进行各种交互,比如,点击界面上的某个按钮或者区域,比如滑动了某个区域;这些交互都会产生各种各样的事件。
CnPeng
2021/05/17
4490
小程序 | 10-事件
二、小程序框架
小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。
天蝎座的程序媛
2023/10/17
3740
二、小程序框架
小程序开发实战项目:构建简易天气预报应用
随着移动互联网技术的飞速发展,小程序以其轻量级、无需下载安装、即用即走的特点,迅速成为了连接用户与服务的新桥梁。微信小程序作为其中的佼佼者,不仅拥有庞大的用户基础,还提供了丰富的开发工具和API接口,让开发者能够轻松构建出功能强大、体验优良的应用。 小程序开发基础
小白的大数据之旅
2025/05/16
1380
小程序开发实战项目:构建简易天气预报应用
全解小程序猜数字游戏 04《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》
由于小程序开发需要一定的基础,这些基础需要提前掌握,本教程只对小程序开发进行零基础说明。
1_bit
2022/01/06
8960
全解小程序猜数字游戏 04《 程序员变现指南之 微信&QQ 小程序 真的零基础开发宝典》
推荐 | 小程序开发基础知识
小程序开发要先注册小程序账号,有了小程序账号才可以使用开发者工具。小程序是一种特殊的开发形式,里面的 API 和组件都是自己定制的,因此在普通的浏览器中不能预览,要预览功能和页面就需要使用开发者工具。
前端黑板报
2019/10/30
1.6K0
推荐 | 小程序开发基础知识
【微信小程序+Python后台从0到1实战开发】02微信小程序基础事件及数据获取
day02 微信小程序 1. 跳转 1.1 对标签绑定点击事件 <view bindtap="clickMe" data-nid="123" data-name="SD" >点我跳转</view> Page({ ... /** * 点击绑定的事件 */ clickMe:function(e){ var nid = e.currentTarget.dataset.nid; console.log(nid); } }) 1.2 页面跳转 wx.navigateTo({
天道Vax的时间宝藏
2021/08/11
1.1K0
小程序-实现自定义组件以及自定义组件间的通信
对于组件的封装,在小程序当中对于多个页面的复用有着重要的作用,小程序中注册的每个页面都是独立的
itclanCoder
2020/11/09
2.8K0
小程序-实现自定义组件以及自定义组件间的通信
推荐阅读
相关推荐
微信小程序:WXML模板语法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验