解决Element Plus el-date-picker组件清空时,触发两次change的问题

news/2025/1/19 21:18:48/

问题

el-date-picker 组件在选择日期范围时会触发两次 change 事件。当用户选择了范围的开始时,会立即触发一次 change 事件。而当用户选择了范围的结束时,又会触发一次 change 事件。

解决方法

1. 延迟更新

<template><div>选择日期--{{dateValue}}</div><el-date-pickerv-model.lazy="dateValue"type="datetimerange"range-separator="To"start-placeholder="开始日期"end-placeholder="结束日期"@change="handleChangeDate"/>
</template>
<script setup >javascript">
import { ElementPlus } from '@element-plus/icons-vue';
import { ref} from 'vue';
const dateValue= ref("");
let debounceTimer = null;const handleChangeDate= (val) => {handleChange(val);
}
const handleChange = (val) => {// 清除已经设置的定时器,以防止多个事件被延迟执行clearTimeout(debounceTimer);debounceTimer = setTimeout(() => {console.log('Date changed:', val);}, 300); // 延迟300毫秒执行
};
</script>

这种方案适合所有时间范围选择(daterange、datetimerange、monthrange、yearrange),但考虑到 JavaScript 是单线程的,如果在指定的时间点上有大量代码正在执行,setTimeout 里的函数可能会被延迟执行。每一个 setTimeou t都是在增加一个新的JavaScript任务,会影响浏览器主线程,导致界面响应变慢。

2. change、clear事件结合

<template><div>选择日期--{{dateValue}}</div><el-date-pickerv-model="dateValue"type="monthrange"range-separator=""start-placeholder="开始日期"end-placeholder="结束日期"@change="handlerChangeDate"@clear="handlerClearDate"/>
</template>
<script setup >javascript">
import { ref} from 'vue'
const dateValue= ref("");
const handlerChangeDate= (val) => {if(val){console.log(‘handlerChangeDate’)}
}const handlerClearDate= () => {console.log(‘handlerClearDate’)
}
</script>

这种方案适合daterange、monthrange、yearrange等三种时间范围选择


http://www.ppmy.cn/news/1564501.html

相关文章

Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架

前言 在过 2 个月即将进入 3 月了&#xff0c;然而面对今年的大环境而言&#xff0c;跳槽成功的难度比往年高了很多&#xff0c;很明显的感受就是&#xff1a;对于今年的 java 开发朋友跳槽面试&#xff0c;无论一面还是二面&#xff0c;都开始考验一个 Java 程序员的技术功底…

Node.js --- 模板引擎EJS

1. 前言 模板引擎是一种工具或库&#xff0c;用于在开发中生成动态内容的 HTML 页面。它通过将预定义的模板与数据结合&#xff0c;生成最终的输出&#xff08;如 HTML 页面、字符串等&#xff09;。模板引擎广泛应用于前端和后端开发&#xff0c;尤其是在构建动态网站时。 2.…

CSS中样式继承+优先级

继承属性和非继承属性 一、定义及分类 1、继承属性是指在父元素上设置了这些属性后&#xff0c;子元素会自动继承这些属性的值&#xff0c;除非子元素显式地设置了不同的值。 常见的继承属性: 字体 font 系列文本text-align text-ident line-height letter-spacing颜色 col…

Ubuntu 开启 SMB 服务,并通过 windows 访问

背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装&#xff0c;运行以下命令进行安装&#xff1a; sudo apt upda…

面试题解析

1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容 要求&#xff1a; 删除所有空行&#xff1b; 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB 创造测试文件&#xff1a;…

计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解

关注&#xff1a;CodingTechWork 引言 在计算机网络中&#xff0c;IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接&#xff0c;还是局域网&#xff08;LAN&#xff09;配置&#xff0c;它们都起着至关重要的作用。理解它们的工作原理&a…

for循环语句题目

for循环&#xff1a; 1整数的个数 给定k(1<k<100)个正整数&#xff0c;其中每个数都是大于等于1&#xff0c;小于等于10的数。写程序计算给定的k个正整数中&#xff0c;1&#xff0c;5和10出现的次数。 #include <stdio.h> int main(){ int k,n; int sum0;…

es 3期 第24节-运用SQL简化DSL查询

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…