网上找到这篇文章:http://www.jssay.com/blog/index.php/2010/04/27/%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8datepicker%E7%9A%84%E6%97%A5%E6%9C%9F/

 现在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限制日期(转)的更多相关文章

  1. .net mvc页面UI之Jquery博客日历控件

    摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...

  2. js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js

    日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https:/ ...

  3. layui日历控件设置选择日期不能超过当前日期

    layui.use('laydate', function() { var laydate = layui.laydate; laydate.render({ elem : '#begin', max ...

  4. Selenium2+python自动化25-js处理日历控件(修改readonly属性)

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  5. selenium操作日历控件

    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...

  6. 2.23 js处理日历控件(修改readonly属性)

    2.23 js处理日历控件(修改readonly属性) 前言    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如 ...

  7. selenium+Python(Js处理日历控件)

    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用js去掉 ...

  8. Selenium2学习(十七)-- js处理日历控件(修改readonly属性)

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  9. Selenium2+python自动化25-js处理日历控件(修改readonly属性)【转载】

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

随机推荐

  1. apache 错误:The system cannot find the file specified.

    在启动apache时出现了以下错误信息 Window日志里也记录了此错误信息   而出现此错误的原因是IIS占用了80端口 停止IIS再重新启动apache即可解决   参考: cannot find ...

  2. mysql zerofill 的使用

    转自:http://www.jquerycn.cn/blog/mysql/ 那这个int[M]中M是什么意义喃,在定义数值型数据类型的时候,可以在关键字括号内指定整数值(如:int(M),M的最大值为 ...

  3. ArcGIS 10.4的0x80040228许可错误

    今天,再次遇到这个问题,再忙得把它记录下来! AO/AE程序的许可方式 不管是开发环境是基于ArcObject还是基于ArcEngine,不管运行环境是Desktop还是Runtime(早已改名了为A ...

  4. Go语言中Restful模式与Routes路由框架

    1.用法: (1)导入包github.com/drone/routes (2)使用包中的New()方法建立一个routes.RouteMux对像的引用.其它也能理解为一个http.Handler,只是 ...

  5. POSTGRESQL 锁表的问题

    一.找出所的语句 select wait.pid, wait.query as wait_query, wait.query_start as wait_query_start, wait.lockt ...

  6. Redis问题MISCONF Redis is configured to save RDB snapshots....

    Redis问题MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on di ...

  7. word2013总是出现未响应卡一下如何解决?

    最近在记笔记,word很烦很烦,总是会卡一下,过一会卡一下.本来以为是自动保存后来发现跟自动保存没有关系. 解决方法:禁用硬件图形加速就好了,不行的话再在硬件加速下面有个"使用子像素定位平滑 ...

  8. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  9. AVERAGE和averageif函数

    1.AVERAGE(Number1,Number2……) 其中: Number1,number2,...是要计算平均值的 1-30 个参数. 注意事项: average函数的参数可以是一个,也可以是多 ...

  10. 如何快速的将一个str转换为list

    # -*- coding: cp936 -*- #python 27 #xiaodeng #如何快速的将一个str转换为list str='python' print list(str)#['p', ...