Layui时间选择设置只能选择整点半点,并隐藏秒钟部分

news2025/1/11 8:03:56

文章目录

      • 1.整点半点选择
      • 2.隐藏秒选择部分
      • 3.默认值处理
        • 3.1 操作`done`函数
        • 3.2 操作`ready`函数

1.整点半点选择

处理思路:通过循环将使用不到的时间点去除掉,关键代码位于ready函数

//选择起止时间
layui.laydate.render({
	elem: '.laydate-times',
	type: "time",
	range: true,
	btns: ['confirm'],
	format: 'HH:mm', //设置日期格式
	//初始化事件
	ready: function (date) {
		var dom = $(".laydate-time-list").children("li");
		//i=选择控件中时分秒顺序,
		//比如这里是时间范围选择,需要选择两段时分秒,所以i=6,
		//秒选择部分被隐藏了,但实际还是存在
		//所以i = 1或i = 4分别对应两个分钟选择器
		for (var i = 0; i < dom.length; i++) {
			var li = $(dom[i]).children("ol").children("li")
			if (i == 1 || i == 4) {
				for (var j = 0; j < li.length; j++) {
					if ($(li[j]).text() != '00' && $(li[j]).text() != '30') {
						$(li[j]).remove();
					}
				}
			}
		}
	},
	//选择完成触发
	done: function (value, date, endDate) {
		
	}
});

2.隐藏秒选择部分

<style>
    /* 设置起止时间选择只展示时分,隐藏秒那一列 */
    .laydate-time-list {
        padding-bottom: 0;
        overflow: hidden;
    }

        .laydate-time-list > li {
            width: 50% !important;
        }

            .laydate-time-list > li:last-child {
                display: none;
            }

        .laydate-time-list ol li {
            width: 100% !important;
            padding-left: 0 !important;
            text-align: center !important;
        }
</style>

3.默认值处理

由于清除掉了非整点半点外的选项,但是结束分钟部分一直默认是59,这就导致了点开选择必须重选一次结束分钟,不然即使选择界面上显示的选中是30,实际上选出来的值也是59。
如果选择的是首尾项的话,那么可以用第二种通过ready方法实现比较好。
如果需要默认中间部分的话操作done可能会更方便快捷一点。
当然我个人对于前端不怎么擅长,所以ready方法具体能不能时间选中中间部分值我也不确定。
因为我这边的需求已经将可选值剔除到只剩两项了,所以我这边暂时也不需要考虑选中中间的情况,加上项目比较急也就没有特地去研究。

3.1 操作done函数

这里用了一个笨办法,即操作选择后事件done,强行变更选中后值

完整done方法如下

//value:显示项例如"00:00:00 - 23:59:59"
//date:开始时间
//endDate:结束时间
done: function (value, date, endDate) {
	var _row = getRowData(this.elem);//获取当前行数据
	_row.SortCode = getRowIndex(this.elem);//获取当前行号
	_row.StartTime = `${date.hours}:${date.minutes}:00`;//拼接开始时间
	//由于默认是59分,所以这里处理为半点
	if (endDate.minutes > 30) {
		endDate.minutes = 30;
	}
	_row.EndTime = `${endDate.hours}:${endDate.minutes}:59`;//拼接结束时间
	//由于去掉多余选项后直接确认选中,结束时间分钟部分默认59
	//所以这里自行拼接返回显示值,而不是直接用value
	//_row.StartEndTime = value;
	_row.StartEndTime = `${IsTens(date.hours)}:${IsTens(date.minutes)} - ${IsTens(endDate.hours)}:${IsTens(endDate.minutes)}`;
	layui.table.reloadData(tableId, _row, true);//更新表数据
}

完整代码

//tableId=layui数据表id
function rowEditBind(tableId) {
	function getRowData(elem) {
		var index = getRowIndex(elem);
		return layui.table.cache[tableId][index] || {};
	};
	function getRowIndex(elem) {
		var index = $(elem).closest('tr').data('index');
        return parseInt(index);
	}
	function IsTens(num) {
		if (num < 10) {
			num = '0' + num;
		}
		return num;
	}
	//选择起止时间
	layui.laydate.render({
		elem: '.laydate-times',
		type: "time",
		range: true,
		btns: ['confirm'],
		format: 'HH:mm', 
		ready: function (date) {
			var dom = $(".laydate-time-list").children("li");
			for (var i = 0; i < dom.length; i++) {
				var li = $(dom[i]).children("ol").children("li")
				if (i == 1) {
					for (var j = 0; j < li.length; j++) {
						if ($(li[j]).text() != '00' && $(li[j]).text() != '30') {
							$(li[j]).remove();
						}
					}
				} else if (i == 4) {
					for (var j = 0; j < li.length; j++) {
						//设置结束时间分钟部分默认选中30样式
						if ($(li[j]).text() == '30') {
							$(li[j])[0].setAttribute("class", 'layui-this');
                        }
						if ($(li[j]).text() != '00' && $(li[j]).text() != '30') {
							$(li[j]).remove();
						}
					}
				}
			}
		},
		done: function (value, date, endDate) {
			var _row = getRowData(this.elem);
			_row.SortCode = getRowIndex(this.elem);
			if (endDate.minutes > 30) {
				endDate.minutes = 30;
			}
			_row.StartEndTime = `${IsTens(date.hours)}:${IsTens(date.minutes)} - ${IsTens(endDate.hours)}:${IsTens(endDate.minutes)}`;
			layui.table.reloadData(tableId, _row, true);
		}
	});
}

3.2 操作ready函数

ready方法中添加以下代码,由于默认分钟部分为59,所以在加载时给最后一个选项添加一个点击效果,从而达到更改默认选中分钟为30的效果

关键代码如下

//laydate-main-list-[1/0]:分别指时间范围控件的开始与结束时间部分,1=结束部分,0=开始部分
$(".laydate-main-list-1 .layui-laydate-content li ol li:last-child").click();

完整ready方法如下

ready: function (date) {
	var dom = $(".laydate-time-list").children("li");
	for (var i = 0; i < dom.length; i++) {
		var li = $(dom[i]).children("ol").children("li")
		if (i == 1 || i == 4){
			for (var j = 0; j < li.length; j++) {
				if ($(li[j]).text() != '00' && $(li[j]).text() != '30') {
					$(li[j]).remove();
				}
			}
		} 
	}
	//laydate-main-list-1分别指时间范围控件的开始与结束时间部分,1=结束部分,0=开始部分
	$(".laydate-main-list-1 .layui-laydate-content li ol li:last-child").click();
},

完整代码如下

//绑定行编辑,参数为layui数据表id
function rowEditBind(tableId) {
	function getRowData(elem) {
		var index = getRowIndex(elem);
		return layui.table.cache[tableId][index] || {};
	};
	function getRowIndex(elem) {
		var index = $(elem).closest('tr').data('index');
		return parseInt(index);
	}
	layui.laydate.render({
		elem: '.laydate-times',
		type: "time",
		range: true,
		btns: ['confirm'],
		format: 'HH:mm',
		ready: function (date) {
			var dom = $(".laydate-time-list").children("li");
			for (var i = 0; i < dom.length; i++) {
				var li = $(dom[i]).children("ol").children("li")
				if (i == 1 || i == 4) {
					for (var j = 0; j < li.length; j++) {
						if ($(li[j]).text() != '00' && $(li[j]).text() != '30') {
							$(li[j]).remove();
						}
					}
				}
			}
			$(".laydate-main-list-1 .layui-laydate-content li ol li:last-child").click();
		},
		done: function (value, date, endDate) {
			var _row = getRowData(this.elem);
			_row.SortCode = getRowIndex(this.elem);
			_row.StartEndTime = value;
			layui.table.reloadData(tableId, _row, true);
		}
	});
}

目前来说一共有两种方法实现选中默认值修改,如果有其他更好的方法欢迎指点。

最终效果如图:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

第五章 Electron|Node 使用cheerio 爬虫

一、cheerio是什么可以做什么 &#x1f447; &#x1f447; &#x1f447; Cheerio是一个快速、灵活且精益的jQuery核心实现&#xff0c;用于在Node.js环境中解析HTML文档。它可以帮助您在服务器端轻松地从HTML文档中提取数据&#xff0c;比如从网页中提取文章标题、内容、图片…

【JVM】.class文件如何在JVM中运行的?

一、先认识JVM的组成 java虚拟机整体包括&#xff1a;类加载系统、运行时数据区、执行引擎、垃圾回收器。 &#xff08;1&#xff09;方法区&#xff1a;线程共享&#xff0c;存储Class信息、常量、静态变量等等&#xff1b; jdk1.6~1.7时称为永久代&#xff0c;存储常量、Cla…

js常见面试题整理

1&#xff1a;JavaScript 有哪些数据类型 答&#xff1a; JavaScript 的数据类型分为原始类型和对象类型。 原始类型有 7 种&#xff0c;分别是&#xff1a; BooleanNumberBigIntStringNullUndefinedSymbol 对象类型&#xff08;也称引用类型&#xff09;是一个泛称&#x…

vue3 中使用indexDb

1.indexDb.js const indexDB window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; class IndexDBCache {// 构造函数constructor() {this._db null; //数据库this._transaction null; //事务this._request null;this._dbName "loginInfoDb"; …

API ‘variantOutput.getPackageLibrary()‘已过时的解决方法

一个发布到maven central的android库项目&#xff0c;为了方便管理&#xff0c;在build.gradle文件中加入了打包处理的一段脚本&#xff1a; //生成aarlibraryVariants.all { variant ->def name "library-${versionMajor}.${versionMinor}.${versionPatch}.aar"…

VUE 3.0 + NGINX + Hls.js + OBS -- 直播推拉流、流视频播放

&#x1f6f4;&#x1f6f4;前言&#xff1a; 该 Demo 基于 OBS推流 Nginx Vue 3.0 Nplayer.js hls.js &#xff0c;目的只是实现流媒体播放&#xff0c;以及简易推拉流直播。 文章目录 前端组件 NPlayer.js安装 nplayer.js 流视频播放页面元素初始化播放器清晰度控件样式…

D*算法详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决)

所需先验知识&#xff08;没有也无大碍&#xff0c;只是了解的话会对D*的理解有帮助&#xff09;&#xff1a;A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法&#xff0c;A*算法则是在Dijkstra算法的基础上加入了启发函数h(x)&am…

js正则中的match()

在前端开发中&#xff0c;正则表达式是一大利器。所以我们这次就来讨论下match()方法。 match本身是JavaScript语言中字符串对象的一个方法&#xff0c;该方法的签名是 match([string] | [RegExp]) 它的参数既可以是一个字符串&#xff0c;也可以是一个正则表达式。该方法绝…

windows 达梦数据库服务连接时提示:登录服务器失败,错误号6001,错误消息:网络通信异常 之数据库服务不存在的处理方式

在windows客户端上连接部署在windows操作系统上的达梦数据库&#xff0c; 使用DM管理工具连接数据库 正确输入用户名与密码之后点击确定按钮之后出现&#xff1a; 登录服务器失败&#xff0c;错误号6001&#xff0c;错误消息&#xff1a;网络通信异常 现象 如下图所示&#…

银行从业资格证 个人理财 各种年金计算公式总结

变量说明&#xff1a; C C C &#xff1a;每期投入的现金流 r r r&#xff1a;利率&#xff08;收益率/贴现率&#xff09; n n n &#xff1a;计息期数&#xff1b; F V FV FV&#xff1a;终值 P V PV PV&#xff1a;现值 推导计算过程用到等比数列求和公式 S n a 1 ∗ 1 −…

【算法训练(day7)】区间和并,离散化数组模板

目录 一.区间和并 二 .离散化数组 一.区间和并 问题&#xff1a;给定 n个区间 [li,ri]&#xff0c;要求合并所有有交集的区间。注意如果在端点处相交&#xff0c;也算有交集。输出合并完成后的区间个数。例如&#xff1a;[1,3][1,3] 和 [2,6][2,6] 可以合并为一个区间 [1,6][1…

htmlCSS-----CSS介绍与样式书写

目录 前言&#xff1a; 1. CSS是什么 2. CSS书写样式 (1)行内样式 (2)内部样式 3.外部样式 4.三者之间的比较 前言&#xff1a; 前面我们学习了HTML的相关标签和框架写法&#xff0c;那我们在了解这些标签用法了之后就要学会怎么去通过相关方法来使得界面美化处理&#xf…

06 Redis分布式锁

常见面试问题 Redis除了拿来做缓存&#xff0c;你还见过基于Redis的什么用法&#xff1f;Redis 做分布式锁的时候有需要注意的问题&#xff1f;如果是 Redis 是单点部署的&#xff0c;会带来什么问题&#xff1f;那你准备怎么解决单点问题呢&#xff1f;集群模式下&#xff0c…

LeetCode刷题集(七)(2315.统计星号)

&#x1f626;学习目标&#xff1a;拿下LeetCode2315.统计星号题目 &#x1f624; 学完本章节知识即可掌握本题&#xff01; 学习内容&#xff1a;LeetCode2315.统计星号 &#x1f624;题目&#xff1a;给你一个字符串 s &#xff0c;每 两个 连续竖线 ‘|’ 为 一对 。换言之&…

知识图谱涉及技术点分析

文章目录 数据从哪里来为什么通常将知识图谱划分到NLP领域&#xff1f;常用NLP技术点分析只是NLP任务吗&#xff1f;graph embedding知识融合业务还是算法&#xff1f;知识图谱组成 数据从哪里来 是手动提取关系吗&#xff1f;数据很多&#xff0c;关系确难涉及大量NLP技术关系…

Ansible基础五——条件语句、循环语句、handlers、任务失败处理

文章目录 一、 循环语句1.1 单量循环1.2 多量循环1.3 老版本用法1.4 loopregister 二、条件判断2.1 根据变量状态判断2.2 根据变量是否存在判断2.3 根据事实判断2.4 多条件判断2.4.1 and用法2.4.2 or用法 2.5 循环判断2.6 根据上个任务结果判断 三、handlers处理程序四、任务失…

5月《中国数据库行业分析报告》正式发布,首发时序、实时数据库两大【全球产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…

ubuntu20安装xrdp以及解决黑屏问题

1、安装xrdp sudo apt-get install xrdp 2、将xrdp用户加入到如下用户组 sudo adduser xrdp ssl-cert 3、重启xrdp sudo service xrdp restart 4、打开windows远程面&#xff0c;连接&#xff0c;如果出现黑屏 sudo -s sudo vim /etc/xrdp/startwm.sh 加入如下内容&#xff…

攻防世界-web-Web_php_unserialize

1. 题目描述&#xff1a;查看以下代码&#xff0c;获取flag 2. 思路分析 从代码中不难看出&#xff0c;这里共有三个地方需要绕过 2.1 __wakeup函数&#xff1a;若在对象的魔法函数中存在的__wakeup方法&#xff0c;那么之后再调用 unserilize() 方法进行反序列化之前则会先…

数据分析概述

数据分析概述 数据的性质数据的概念数据与信息的区别和联系 数据的类型按照度量尺度分按时间状况分 什么是数据分析数据分析的重要性数据分析的内容数据分析作用 数据分析的基本流程典型的数据分析的流程 数据分析方法对比分析法分组分析法定量数据分布分析——具体事例 结构分…