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 ...
随机推荐
- apache 反向代理的时候,通过域名访问是,出现跳转到ip或者无权访问的情况
解决方法很简单,在配置反向代理的时候加上一行: ProxyPreserveHost On 例如:ProxyPass / http://202.112.0.1/ProxyPassReverse / ht ...
- 树莓派中找不到/dev/video0的解决方案及RaspberryCam的使用
一.原因 当使用CSI连接的方式将摄像头模块连接树莓派后,在/dev/中找不到video0,因此使用一些第三方库(如Opencv或RaspberryCam)去调用摄像头时,无法调用成功. 二.解决方法 ...
- postman发送get请求
在地址栏里输入请求url(用到拼接方式):http://127.0.0.1:8081/getuser?userid=1 选择“GET”方式, 点击“send”得到json数据如图 分类: post ...
- SQL Server还原数据库
http://www.cnblogs.com/ggll611928/p/6377545.html 恢复数据库: 1.分离数据库以断开当前的访问连接. 2.附加数据库mdf文件. 3.执行RESTORE ...
- angularjs的config和interceptor - session注入
config 这个要从config的正确使用说起,也许你想在config某个provider的时候注入$rootscope, 但是这是不允许的,我们细看下面的特性 session注入 每个请求自带se ...
- Python学习笔记_04:Django框架简介
目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...
- Percona-XtraBackup系列一:安装 perl(Time::HiRes) is needed by percona-xtrabackup-2.2.10-1.el6.x86_64
1:在percona官网下载最新的Xtrabackup http://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.10/bi ...
- Linux进程共享通信 -- mmap实现
https://blog.csdn.net/y396397735/article/details/50651633 使用mmap内存映射实现一端写,另一端读的进程间通信 写端代码write.c /*w ...
- 〖Android〗屏幕触屏事件录制与回放
需求: 不管是做自动化测试的,还是传媒技术的,自动化操作Android App是一种操作需求: 自动化的操作可以节省很多的人力资源投入: 实现: Android UI界面的自动化,通常有两个方法: 1 ...
- Android 虚拟现实(virtual reality)入门指南
入门指南 本文档介绍怎样使用实验性的 Cardboard SDK for Android 创建您自己的虚拟实境 (VR) 体验. Android 演示版应用:Treasure Hunt 本教程中的代码 ...