Jquery UI的日历控件datepicker限制日期(转)
现在jquery用的很广泛,一方面是其强大的库,另一方面是它的插件很丰富。最近用了jquery的datepicker插件,感觉很棒,界面很漂亮,功能齐全,且扩展性很好。强烈推荐使用。
项目中有一个需求,要禁用某些日期,比如周末,节假日。看了datepicker的源码,发现里面有一个noWeekends方法可非常简单地实现禁用周末,请看代码:
$("#datepicker").datepicker({
beforeShowDay: $.datepicker.noWeekends
});
如果要禁用某些特定的日期,可定义一个函数实现,如下:
natDays = [
[, ,], [, ,], [, ,], [, ,],
];
function nationalDays(date) {
for (i = ; i < natDays.length; i++) {
if (date.getFullYear() == natDays[i][] && date.getMonth() == natDays[i][] -
&& date.getDate() == natDays[i][]) {
return [false, natDays[i][] + '_day'];
}
}
return [true, ''];
}
$("#datepicker").datepicker({
beforeShowDay: nationalDays
});
上面函数的返回值是以个数组,第一个布尔值表示是否禁用该日期,true为不禁用,false为禁用。第二个参数是以个样式名,可自定义被禁用时的样式。
如果只要求某个时间段的日期可以选择,通过设置两个参数可以实现:
$("#datepicker").datepicker({
minDate: new Date(, , ),
maxDate: new Date(, , ),
});
以上设置表示在2009年5月6号到2009年6月14号是可选的。
现在考虑我自己的应用,我现在要做淡旺季的价格表,如果选择旺季,日期就不能选择非旺季的日期,淡季和平季也是如此。
这样乍看起来需要界定一个日期范围,但是研究楼上的源代码后看到,只需要限定月份就行了。因为每个淡旺季的开头和结尾都是以自然月的1号和30号(31,28号)为结束的,所以数组那里只需要一个值,而不需要三个值来判断。对于一般的应用,最多也是需要两个,也就是日期和月份,年份几乎每年都一样。
另外一个变通点,起始日期的选择。如果旺季开始于7月,当前日期是5月,那么日历的起始日期应该是7月1日。如果当前日期正好处于旺季,那么就从当天开始作为日期的起始点。
第三,我必须要从一个隐藏元素中获取当前的季节特征,淡季,平季还是旺季,不同的季节有不同的价格。那么因为各个浏览器对于浏览器加载元素的时机不同,所以决定放在jquery的$(function(){});里面。
于是就有了如下的js
var d=new Date();
var y=d.getFullYear();
var m=d.getMonth()+;
var day=d.getDate(); function nationalDays(date) {
for (i = ; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][] - ) {
return [false, natDays[i][] + '_day'];
}
}
return [true, ''];
} $(function(){
var season=document.getElementById('season').value;
if(season=='busy'){
document.getElementById('seasonTips').innerHTML='旺季的月份选择只能是4月5月9月10月11月'
if(m> && m<){
mindate=y+'-4-1';
}else if(m>&&m<){
mindate=y+'-9-1';
}else if(m>){
mindate=y++'-4-1';
}else{
mindate=y+'-'+m+'-'+day;
}
//旺季4,5,9,10,11
natDays=[[],[],[],[], [], [],[],];
}else if(season=='common'){
document.getElementById('seasonTips').innerHTML='平季的月份选择只能是3月6月7月8月';
if(m<){
mindate=y+'-3-1';
}else if(m> && m<){
mindate=y+'-6-1';
}else if(m>){
mindate=y++'-3-1'
}else{
mindate=y+'-'+m+'-'+day;
}
//平3678
natDays=[[],[],[],[],[],[],[],[],];
}else if(season=='dull'){
document.getElementById('seasonTips').innerHTML='淡季的月份选择只能是1月2月和12月';
if(m> && m<){
mindate=y+'-12-1';
}else{
mindate=y+'-'+m+'-'+day;
}
//淡季12.1.2,禁用345678910
natDays=[[],[],[],[],[],[],[],[],[],];
}
// Datepicker
$('.Wdate').datepicker({
numberOfMonths:,
showButtonPanel:false,
dateFormat: 'yy-mm-dd',
minDate: mindate,
beforeShowDay: nationalDays,
});
});
Jquery UI的日历控件datepicker限制日期(转)的更多相关文章
- .net mvc页面UI之Jquery博客日历控件
摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...
- js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js
日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https:/ ...
- layui日历控件设置选择日期不能超过当前日期
layui.use('laydate', function() { var laydate = layui.laydate; laydate.render({ elem : '#begin', max ...
- Selenium2+python自动化25-js处理日历控件(修改readonly属性)
前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...
- selenium操作日历控件
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...
- 2.23 js处理日历控件(修改readonly属性)
2.23 js处理日历控件(修改readonly属性) 前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如 ...
- selenium+Python(Js处理日历控件)
日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...
- Selenium2学习(十七)-- js处理日历控件(修改readonly属性)
前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...
- Selenium2+python自动化25-js处理日历控件(修改readonly属性)【转载】
前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...
随机推荐
- linux下获取硬盘使用情况[总结]
1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...
- 【Python】使用torrentParser1.03对单文件torrent的分析结果
C:\Users\horn1\Desktop\python\42-torrentParser>python torrentParser.py 文件名=./5.torrent 文件结构: anno ...
- 如何让Fiddler可以抓取https的请求
转自:https://jingyan.baidu.com/article/00a07f38bb4f4682d028dcd2.html Fiddler通过在本机开启了一个http的代理服务器来进行htt ...
- 浅谈压缩感知(七):常见测量矩阵的MATLAB实现
1.随机高斯测量矩阵 function [ Phi ] = GaussMtx( M,N ) %GaussMtx Summary of this function goes here % Generat ...
- KVM 虚拟化技术
1.1 前言 1.1.1 什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU.内存.磁盘空间.网络适配器 ...
- Android自定义一款带进度条的精美按键
Android中自定义View并没有什么可怕的,拿到一个需要自定义的View,首先要做的就是把它肢解,然后思考每一步是怎样实现的,按分析的步骤一步一步的编码实现,最后你就会发现达到了你想要的效果.本文 ...
- 我不是学Java的!我不是学Java的!我不是学Java的!。。。。【自我催眠中】
我不是学Java的!我不是学Java的!我不是学Java的!....[自我催眠中]
- Camtasia Studio CamStudio如何不录制鼠标
在录制的小窗口中,点击Effects-Options,然后Cursor里面取消勾选Make cursor effects 可能会报错说请选择有效的声音文件 在Sound里面选择一个有效的目录,不能 ...
- WebStorm 之 Cordova 环境搭建
一.环境搭建 Cordova 环境配置之前,应先下载安装 Node.js ,中文官网:http://nodejs.cn/. 以管理员身份运行 cmd 命令行工具: 1.查看 Node.js 是否已安装 ...
- 微信小程序 - scroll-into-view(提示)
scroll-view的参数scroll-into-view适用于索引以及回到顶部 .详情见官方文档scroll-view: 点击下载:scroll-into-view示例