小程序中事件对象的属性与方法

在小程序中,事件处理函数的参数为事件对象(通常命名为 e),包含了事件相关的详细信息(如事件类型、触发元素、传递的数据等)。事件对象的属性和方法因事件类型(如点击、输入、触摸等)略有差异,但核心属性具有通用性。

一、核心属性

1. type

类型:String

说明:表示事件的类型(如 "tap"、"input"、"longpress" 等)。

示例:

// 点击事件的处理函数
handleTap(e) {console.log(e.type); // 输出 "tap"
}

2. target

类型:Object

说明:触发事件的「源头元素」(可能是子组件),包含该元素的标签名、id、class等信息。

属性结构:

id:元素的 id 属性值

dataset:元素通过 data-* 定义的自定义数据(仅当前元素的)

tagName:元素的标签名(如 "view"、"button")

classList:元素的 class 列表

示例:

<view bind:tap="handleTap"><button id="btn" data-type="submit">点击</button>
</view>handleTap(e) {console.log(e.target.id); // 输出 "btn"(源头是button)console.log(e.target.dataset.type); // 输出 "submit"
}

3. currentTarget

类型:Object

说明:绑定事件的当前元素(与 target 可能不同,若事件冒泡则可能为父元素),属性结构同 target

示例:

<view id="parent" bind:tap="handleTap" data-parent="true"><button id="child">点击</button>
</view>handleTap(e) {console.log(e.currentTarget.id); // 输出 "parent"(事件绑定在view上)console.log(e.currentTarget.dataset.parent); // 输出 trueconsole.log(e.target.id); // 输出 "child"(触发事件的源头是button)
}

4. detail

类型:Object

说明:事件的详细信息,内容因事件类型而异,是最常用的属性之一。

常见事件的 detail 内容:

tap/longpress(点击/长按):包含触摸点坐标

{ x: 150, y: 300 } // 相对于页面的坐标

input(输入框输入):包含输入值

{ value: "用户输入的内容", cursor: 5 } // cursor是光标位置

change(表单元素值变化)

复选框(checkbox):{ value: ["选中的值1", "选中的值2"] }

单选框(radio):{ value: "选中的值" }

滑块(slider):{ value: 50 }(当前值)

submit(表单提交):包含表单所有字段的键值对

  • { value: { username: "张三", age: "18" } }

示例(input事件):

<input bind:input="handleInput" />handleInput(e) {console.log(e.detail.value); // 实时输出用户输入的内容
}

5. dataset

类型:Object

说明:绑定事件的元素(currentTarget)通过 data-* 定义的自定义数据集合(简化获取方式,等价于 e.currentTarget.dataset)。

示例:

<button bind:tap="handleClick" data-id="100" data-user-name="张三">点击</button>handleClick(e) {console.log(e.dataset.id); // 输出 100(注意:data-id 对应 dataset.id)console.log(e.dataset.userName); // 输出 "张三"(注意:data-user-name 会转为驼峰式 userName)
}

6. mark

类型:Object

说明:通过 mark: 前缀定义的自定义数据(与 dataset 类似,但支持事件冒泡传递,即父元素可获取子元素的 mark 数据)。

示例:

<view bind:tap="handleTap" mark:parent="view"><button mark:child="btn">点击</button>
</view>handleTap(e) {console.log(e.mark.parent); // 输出 "view"(当前元素的mark)console.log(e.mark.child); // 输出 "btn"(子元素的mark,因冒泡被传递)
}

7. timestamp

类型:Number

说明:事件触发的时间戳(毫秒级,从1970年开始计算)。

示例:

handleTap(e) {console.log(e.timestamp); // 输出 1620000000000(事件触发的时间)
}

8. touches 与 changedTouches

类型:Array<Object>

说明:仅在触摸事件(如 touchstarttouchmovetouchend)中存在,包含触摸点的坐标信息。

touches:当前屏幕上所有触摸点的列表

changedTouches:当前事件中状态发生变化的触摸点列表(如触摸开始、移动、结束)

触摸点对象的属性:

clientX/clientY:相对于页面可视区域的坐标(不含导航栏、状态栏)

pageX/pageY:相对于页面的坐标(含滚动距离)

screenX/screenY:相对于屏幕的坐标

示例:

<view bind:touchmove="handleTouchMove">滑动</view>handleTouchMove(e) {console.log(e.changedTouches[0].clientX); // 输出当前触摸点的X坐标
}

二、常用方法

小程序事件对象的方法较少,主要用于事件控制,常见的有:

1. stopPropagation()

说明:阻止事件冒泡(等价于使用 catch:事件类型 绑定事件)。

示例:

<view bind:tap="parentTap"><button bind:tap="childTap">点击</button>
</view>childTap(e) {e.stopPropagation(); // 阻止事件冒泡到父元素console.log("子元素事件");
}parentTap() {console.log("父元素事件"); // 不会执行,因事件被阻止冒泡
}

2. preventDefault()

说明:阻止事件的默认行为(部分事件有默认行为,如表单提交的跳转)。

示例:

<form bind:submit="handleSubmit"><button form-type="submit">提交</button>
</form>handleSubmit(e) {e.preventDefault(); // 阻止表单默认提交行为(如页面刷新)console.log("自定义提交逻辑");
}

三、总结

事件对象的核心属性中,detail(获取事件详情)、dataset(获取自定义数据)、target/currentTarget(获取元素信息)是开发中最常用的。不同事件类型的 detail 内容差异较大,需根据具体场景查阅对应事件的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916943.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用宝塔“PostgreSQL管理器”安装的PostgreSQL,如何设置远程连接?

安装 PostgreSQL 使用宝塔“PostgreSQL管理器”安装PostgreSQL&#xff0c;版本可以根据自己的需求来选择&#xff0c;我这里使用的是16.1 创建数据库 根据下图所示步骤创建数据库&#xff0c;其中 “访问权限”一定要选择“所有人”启用远程连接设置允许所有 IP 连接 listen_a…

论文:M矩阵

M矩阵是线性代数中的一个概念&#xff0c;它是一种特殊类型的矩阵&#xff0c;具有以下性质&#xff1a;非负的非对角线元素&#xff1a;矩阵的所有非对角线元素都是非负的&#xff0c;即对于矩阵MMM中的任意元素mijm_{ij}mij​&#xff0c;当i≠ji\neq jij时&#xff0c;有m…

跳跃表可视化深度解析:动态演示数据结构核心原理

跳跃表可视化深度解析&#xff1a;动态演示数据结构核心原理 一、跳跃表基础概念与核心优势 跳跃表&#xff08;SkipList&#xff09;是一种基于多层索引链表的数据结构&#xff0c;通过概率平衡实现高效的插入、删除和查找操作。其核心优势体现在&#xff1a; ​时间复杂度优…

《Sentinel服务保护实战:控制台部署与SpringCloud集成指南》

sentinel 介绍 Sentinel是阿里巴巴开源的一款服务保护框架&#xff0c;目前已经加入SpringCloudAlibaba中。官方网站&#xff1a; home | Sentinel Sentinel 的使用可以分为两个部分: 核心库&#xff08;Jar包&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行…

IBM Watsonx BI:AI赋能的下一代商业智能平台

产品概览 IBM Watsonx BI 是基于 watsonx 企业级 AI 与数据平台 构建的智能分析解决方案&#xff0c;专为现代化企业打造。它深度融合人工智能技术&#xff0c;突破传统 BI 工具的限制&#xff0c;通过自动化数据洞察、自然语言交互和预测分析&#xff0c;帮助企业在复杂数据环…

Python实现GO鹅优化算法优化GBRT渐进梯度回归树回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取 或者私信获取。 1.项目背景 随着大数据和人工智能技术的快速发展&#xff0c;回归预测在金融、气象、能源等多个领域中扮演着至关…

深度学习计算(深度学习-李沐-学习笔记)

层和块 单一输出的线性模型&#xff1a;单个神经网络 &#xff08;1&#xff09;接受一些输入&#xff1b; &#xff08;2&#xff09;生成相应的标量输出&#xff1b; &#xff08;3&#xff09;具有一组相关 参数&#xff08;parameters&#xff09;&#xff0c;更新这些参数…

leetcode热题——搜索二维矩阵Ⅱ

目录 搜索二维矩阵Ⅱ 题目描述 题解 解法一&#xff1a;暴力搜索 C 代码实现 复杂度分析 解法二&#xff1a;二分查找 C 代码实现 复杂度分析 解法三&#xff1a;Z字形查找 算法核心思想 算法步骤详解 C 代码实现 复杂度分析 搜索二维矩阵Ⅱ 题目描述 编写一个…

牛客 - 数组中的逆序对

描述 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007 数据范围&#xff1a; 对于 50% 的数据, size≤104 s…

Linux 日志管理与时钟同步详解

Linux 日志管理与时钟同步详解 一、日志管理 1. 日志服务概述 Linux 系统中主要有两种日志服务&#xff0c;分别负责临时和永久日志的管理&#xff1a; systemd-journald&#xff1a;存储临时日志&#xff0c;服务器重启后日志会丢失&#xff0c;无需手动配置rsyslog&#xff1…

个人如何做股指期货?

本文主要介绍个人如何做股指期货&#xff1f;个人参与股指期货交易需要遵循一定的流程和规则&#xff0c;同时需充分了解其高风险、高杠杆的特点&#xff0c;并做好风险管理。个人如何做股指期货&#xff1f;一、了解股指期货基础股指期货是以股票价格指数为标的物的金融期货合…

设计模式-单例模式 Java

模式概述 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最基础但应用最广泛的创建型模式之一&#xff0c;确保一个类仅有一个实例&#xff0c;并提供一个全局访问点。这种模式在需要全局唯一对象的场景中至关重要&#xff0c;如配置管理、线程池、数据库连接…

RFID 系统行业前沿洞察:技术跃迁与生态重构

在物联网与人工智能深度融合的时代&#xff0c;RFID&#xff08;射频识别&#xff09;系统正经历从 “单品识别工具” 到 “智能决策中枢” 的范式转变。这一技术凭借其非接触式数据采集、环境适应性强、全生命周期追溯等特性&#xff0c;在医疗、制造、农业、环保等领域引发连…

实现implements InitializingBean, DisposableBean 有什么用

在 Spring 框架中&#xff0c;实现 InitializingBean 和 DisposableBean 接口用于管理 Bean 的生命周期回调&#xff0c;分别控制 Bean 的初始化后和销毁前行为。具体作用如下&#xff1a;1. InitializingBean 接口public interface InitializingBean {void afterPropertiesSet…

GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【一】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.2 版本&#xff0c;该版本带来了议题和任务的自定义工作流状态、新的合并请求主页、新的群组概览合规仪表盘、下载安全报告的 PDF 导出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等几十个重点功能的改进…

如何快速把Clickhouse数据同步到Mysql

直接使用Clickhouse官方支持的Mysql引擎表的方式&#xff01; 一、首先创建Mysql引擎表&#xff1a; CREATE TABLE saas_analysis.t_page_view_new_for_write (id Int64,shop_id Nullable(Int64),session_id Nullable(String),client_id Nullable(String),one_id Nullable(Str…

Kafka 重复消费与 API 幂等消费解决方案

Kafka 是一个高性能的分布式消息系统&#xff0c;但消费者重启、偏移量&#xff08;offset&#xff09;未正确提交或网络问题可能导致重复消费。API 幂等性设计则用于防止重复操作带来的副作用。本文从 Kafka 重复消费和 API 幂等性两个方面提供解决方案&#xff0c;重点深入探…

win11推迟更新

1、按住WINR2、输入以下命令&#xff1a;reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 10000 /f3、点击确定4、打开搜索框5、在搜索框里边输入更新&#xff0c;选择检查更新6、在暂停…

【uniapp】---- 使用 uniapp 实现视频和图片上传且都可以预览展示

1. 前言 接手得 uniapp 开发的微信小程序项目,新的开发需求是需要同时上传图片和视频,但是之前的上传都没有进行封装,都是每个页面需要的时候单独实现,现在新的需求,有多个地方都需要上传图片、视频或语音等,这样就需要封装一个组件,然后发现部分地方使用了 uni-file-p…

(nice!!!) (LeetCode 每日一题) 2411. 按位或最大的最小子数组长度(位运算+滑动窗口)

2411. 按位或最大的最小子数组长度 思路&#xff1a;位运算滑动窗口&#xff0c;时间复杂度0(n*32)。 **遍历每一个元素nums[i]&#xff0c;然后看能否改变它前面的元素nums[j]&#xff08; j<i &#xff09;&#xff0c; 当(nums[j]|nums[i])nums[j]时&#xff0c;说明当前…