bootstrap-datepicker实现只能选择每一年的某一个月份

news2024/11/30 14:44:48

1、问题描述

        最近碰到一个需求,要求日期控件选择的时候,只能选择某一年的1月份。

2、解决方法

        使用setStartDate()和setEndDate()函数对日期选择框进行范围限制。

3、我的代码

        【免费】bootstrap-datepicker实现只能选择每一年的某一个月份资源-CSDN文库

3.1、有bug的代码

        注意:这段代码虽然也实现了“只能选择某个年份的1月份”的效果,但是是有Bug的。这个bug比较好玩,所以我特地放在这里。可以多点点试试看。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>有bug的</title>
	</head>
	<script type="text/javascript" src="./js/jquery.min.js"></script>
	<script type="text/javascript" src="./js/bootstrap-datepicker.min.js"></script>
	<script type="text/javascript" src="./js/bootstrap-datepicker.zh-CN.min.js"></script>
	<link rel="stylesheet" type="text/css" href="./css/bootstrap-datepicker3.min.css" />
	<body>
		<script type="text/javascript">
			$(function() {
				//年-月格式
				$('.YearMonth').datepicker({
					format: 'yyyy-mm',
					startView: 2, //日期控件打开时候显示的视图 2  代表年份
					maxViewMode: 2, //最大视图模式 默认值 4  2代表年份
					minViewMode: 1, //最小视图模式 设置视图模式的最小限制 2  代表年份
					autoclose: 'true',
					todayHighlight: 'true',
					language: 'zh-CN',
					orientation: 'button',
					clearBtn: true
				})
				var flag = false;

				$("#IndexDateBegin").change(function() {
					console.log($(this).val())
					if (flag) {
						$(this).datepicker("setStartDate", null);
						$(this).datepicker("setEndDate", null);
						flag = false;
						console.log("flag=" + flag)
					}
				});

				$("#IndexDateBegin").datepicker().on('changeYear', function(e) {
					console.log("changeYear");
					console.log(e.date)
					var sCapacity = $("#Capacity").val();
					var currYear = String(e.date).split(" ")[3];
					if (!flag) {
						$(this).datepicker("setEndDate", currYear + "-01");
						$(this).datepicker("setStartDate", currYear + "-01");
						flag = true;
					}

					console.log(currYear + ":" + flag);
				});
			});
		</script>
		日期:<input type="text" class="YearMonth" name="IndexDateBegin" id="IndexDateBegin" value="" onfocus="this.blur();" />
	</body>
</html>

       

3.2、正确的代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>正确的</title>
	</head>
	<script type="text/javascript" src="./js/jquery.min.js"></script>
	<script type="text/javascript" src="./js/bootstrap-datepicker.min.js"></script>
	<script type="text/javascript" src="./js/bootstrap-datepicker.zh-CN.min.js"></script>
	<link rel="stylesheet" type="text/css" href="./css/bootstrap-datepicker3.min.css" />
	<body>
		<script type="text/javascript">
			window.onload=function(){
				// $("#IndexDateBegin").datepicker("setStartDate", null);
				// $("#IndexDateBegin").datepicker("setEndDate", null);
				// if($("#IndexDateBegin").val()==""){
				// 	$("#IndexDateBegin").val(new Date().getFullYear()+"-0"+(new Date().getMonth()+1));
				// }
			}
			$(function() {
				//年-月格式
				$('.YearMonth').datepicker({
					format: 'yyyy-mm',
					startView: 2, //日期控件打开时候显示的视图 2  代表年份
					maxViewMode: 2, //最大视图模式 默认值 4  2代表年份
					minViewMode: 1, //最小视图模式 设置视图模式的最小限制 2  代表年份
					autoclose: 'true',
					todayHighlight: 'true',
					language: 'zh-CN',
					orientation: 'button',
					clearBtn: true
					//useCurrent: false
				})
				//flag的作用就是判断,datepicker日期控件是否点了“年份”,如果点了“年份”,则根据选中的“年份”限定“月份”范围只能是当前选中“年份”的1月份!
				var flag = false;
				//用于记录changeYear的次数,因为datepicker控件的默认年份是当前年份。
				var clickNum=0;
				// $(".clear").click(function(){
				// 	console.log("clear")
				// 	alert("1223");
				// });
				
				$("#IndexDateBegin").change(function() {
					if($(this).val()==""){
						clickNum=0;
						//alert("1223");
					}
					console.log($(this).val())
					if (flag) {
						$(this).datepicker("setStartDate", null);
						$(this).datepicker("setEndDate", null);
						flag = false;
						console.log("flag=" + flag)
					}
				});
				
				$("#IndexDateBegin").datepicker().on('changeYear', function(e) {
					clickNum=clickNum+1;
					//$(this).val("");
					console.log("changeYear");
					console.log(e.date)
					var sCapacity = $("#Capacity").val();
					var currYear = String(e.date).split(" ")[3];
					if(!flag){
						if(clickNum==1){
							$(this).datepicker("setEndDate", currYear + "-01");
						}
						if(clickNum>1){
							$(this).datepicker("setEndDate", currYear + "-01");
							$(this).datepicker("setStartDate", currYear + "-01");
						}
						
						flag = true;
					}
					
					

					console.log(currYear + ":" + flag);
				});
			});
		</script>
		日期:<input type="text" class="YearMonth" name="IndexDateBegin" id="IndexDateBegin" value="" onfocus="this.blur();" />
	</body>
</html>

         注意:其实这个正确代码也有点小bug,只是不影响使用!

        只要你别每次点一半(只点年份不点月份)就清除了,就没有问题了。碰到这个bug,只要点进年份,再点进月份。只要完整的把年份月份都点完,那么日期框的所有年份又都是可用的了!

4、运行效果

        

5、总结

        因为网上没有查到现成的代码可以用,所以只能自己写了。网上查资料的时候看到了这篇文章关于javascript:更改时如何获取Bootstrap Datepicker的年份和月份 | 码农家园 (codenong.com)

给了我启发! 

6、参考资料

关于javascript:更改时如何获取Bootstrap Datepicker的年份和月份 | 码农家园 (codenong.com) 

bootstrap-datepicker — bootstrap-datepicker documentation 

GitHub - uxsolutions/bootstrap-datepicker: A datepicker for twitter bootstrap (@twbs) 

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

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

相关文章

JavaWeb_LeadNews_Day12-jenkins

JavaWeb_LeadNews_Day12-jenkins 后端项目部署多环境配置切换服务集成docker配置父工程项目构建构建微服务部署服务到远程服务器整体思路安装私有仓库jenkins插件部署服务准备工作部署服务 jenkins触发器来源Gitee 后端项目部署 多环境配置切换 在微服务中的bootstrap.yml中新…

Dajngo06_Template模板

Dajngo06_Template模板 6.1 Template模板概述 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术 静态网页&#xff1a;页面上的数据都是写死的&#xff0c;万年不变 动态网页&#xff1a;页面上的数据是从后端动态获取的&#xff08;后端获取数据库…

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树&#xff0c;是一种特殊的树&#xff0c;特点是树的度小于等于2&#xff08;树的度是整个树的结点的度的最大值&#xff09;&#xff0c;由于该特性&#xff0c;构建二叉树的结点只有三个成员&#xff0c;结点的值和指向结点左、右子树的指针。 typedef int DateType; t…

长亭雷池社区版本安装与使用

0x01 雷池介绍 一款足够简单、足够好用、足够强的免费 WAF。基于业界领先的语义引擎检测技术&#xff0c;作为反向代理接入&#xff0c;保护你的网站不受黑客攻击。核心检测能力由智能语义分析算法驱动&#xff0c;专为社区而生&#xff0c;不让黑客越雷池半步。 官方网址&…

第一类曲线积分与二重积分在极坐标系下表示的区别

1.第一类曲线积分与二重积分在极坐标系下表示的区别 区别主要来源于一是曲线积分的积分区域为边界&#xff0c;而二重积分的积分区域为内部边界&#xff0c;二是极点位置选取的不同&#xff0c;二者共同造成在积分区域在极坐标下表示的不同&#xff0c;即 ρ \rho ρ是常量还是…

解决谷歌浏览器会http网站自动变成https的问题

不知道是不是升级的缘故&#xff0c;最近打开公司一个http网站&#xff0c;会自动跳去https&#xff0c;用了网上说的这个方案&#xff0c;如下&#xff1a; 但发现还不行&#xff0c;这时我尝试用点击地址栏左边那锁的那个图标&#xff0c;图如下&#xff1a; 然后点击网站设…

Pytest系列-数据驱动@pytest.mark.parametrize(7)

简介 unittest 和 pytest参数化对比&#xff1a; pytest与unittest的一个重要区别就是参数化&#xff0c;unittest框架使用的第三方库ddt来参数化的 而pytest框架&#xff1a; 前置/后置处理函数fixture&#xff0c;它有个参数params专门与request结合使用来传递参数&#x…

【javaSE】 枚举与枚举的使用

文章目录 &#x1f384;枚举的背景及定义⚾枚举特性总结&#xff1a; &#x1f332;枚举的使用&#x1f6a9;switch语句&#x1f6a9;常用方法&#x1f4cc;示例一&#x1f4cc;示例二 &#x1f38d;枚举优点缺点&#x1f334;枚举和反射&#x1f6a9;枚举是否可以通过反射&…

【基本数据结构 三】线性数据结构:栈

学习了数组和链表后,再来看看第三种线性表结构,也就是栈,栈和后边讲的队列一样是一种受限的线性表结构,正是因为其使用有限制,所以对于一些特定的需要操作可控的场合,受限的结构就非常有用。 栈的定义 我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也…

矩阵系统全方位管理多平台1000多个账号,实现精准化运营获客!

全自动化视频综合处理工具&#xff01; ​ 普通的剪辑软件是不可能实现自动化&#xff0c;一个人一天制作3000条视频&#xff01;​必须要借助高效率的工具【呆头鹅批量剪辑软件】探店混剪系统&#xff0c;导入大量的素材&#xff0c;就能自动帮你批量处理&#xff0c;满…

第28章_瑞萨MCU零基础入门系列教程之基于面向对象的工程结构

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Django05_反向解析

Django05_反向解析 5.1 反向解析概述 随着功能的不断扩展&#xff0c;路由层的 url 发生变化&#xff0c;就需要去更改对应的视图层和模板层的 url&#xff0c;非常麻烦&#xff0c;不便维护。这个时候我们可以通过反向解析&#xff0c;将 url解析成对应的 试图函数 通过 path…

OSCP系列靶场-Esay-Vegeta1保姆级

OSCP系列靶场-Esay-Vegeta1保姆级 目录 OSCP系列靶场-Esay-Vegeta1保姆级总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH手动登录尝试(无)22-SSH弱口令…

魔众携手ModStart上线全新模块市场,支持模板主题

ModStart模板主题 对于很多新手或者是缺乏经验的开发者来说&#xff0c;快速建站具有一定的难度&#xff0c;总是一件让人头疼的问题。 ModStart为开发者提供了一些模板主题供开发者选购使用&#xff0c;模块市场包含了丰富的模块&#xff0c;后台一键快速安装&#xff0c;让开…

Botowski:SEO友好的AI内容生成器

【产品介绍】 名称 Botowski 具体描述 Botowski是一个人工智能内容生成器&#xff0c;可以被撰稿人、企业主和其他人用来创建高质量的内容。 它可以创建各种主题的文章、博客文章&#xff0c;甚至散文。Botowski的设计是用户友好的;你所需要做…

Java笔记042-反射章节练习

反射章节练习 练习1&#xff1a;通过反射修改私有成员变量 定义PrivateTest类&#xff0c;有私有name属性&#xff0c;并且属性值为helloKitty提供getName的公有方法创建PrivateTest的类&#xff0c;利用Class类得到私有的name属性&#xff0c;修改私有的name属性值&#xff…

过拟合、欠拟合、泛化误差、训练误差

模型容量的影响&#xff1a; 泛化误差&#xff1a; 当训练的模型的容量过了最优点时&#xff0c;泛化误差反而升高&#xff0c;这是由于模型过于关注细节导致&#xff0c;模型也同时记住噪声&#xff1b;当拿来一个真的数据时&#xff0c;模型会被一些无关紧要的细节所干扰。 …

Python数据分析 — 数据分析概念、重要性、流程和常用工具

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。Python数据分析是利用Python编程语言进行数据处理、转换、清洗、可视化和建模的过程。Python在数据科学领域非常流行&#xff0c;有许多强大的库和工具可供使用&#xff0c;例如NumPy、Pandas、Matplotlib和Scikit-learn等…

问道管理:iPhone15系列发布 星闪技术快速商用

9月12日&#xff0c;沪指盘中窄幅震动收拾&#xff0c;创业板指午后下探。到收盘&#xff0c;沪指跌0.18%报3137.06点&#xff0c;深成指微跌0.08%报10373.99点&#xff0c;创业板指跌0.59%报2051.04点&#xff1b;两市算计成交7083亿元&#xff0c;较此前一日削减1329亿元&…

UPS电源UL1778认证,不间断电源系统ul1778认证

UPS电源UL1778认证&#xff0c;不间断电源系统ul1778认证 UL认证-不间断电源系统ul1778认证范围&#xff1a; 不间断电源系统&#xff1a;UPS即不间断电源(Uninterruptible Power Supply)&#xff0c;是一种含有储能装置的不间断电源。主要用于给部分对电源稳定性要求较高的设…