jquery ui的datepicker或者datetimepicker怎么设置某些日期/天不能被选择,变灰色

时间: 作者:admin 浏览:

datepicker怎么设置某些日期不能被选择?

调用jQuery UI的datepicker控件的时候,有时需要设定控件中的某些天是不可选的。而datepicker中每次显示天之前都会调用beforeShowDay方法。所以可以在beforeShowDay方法中对选择的日期进行处理。

代码示例:

//1、第一种写法:

$("#datepicker" ).datepicker({
    dateFormat: "yy/mm/dd",
    beforeShowDay: disableSpecificDays()
});

var disabledDays =['2017/08/25','2017/08/26'];//格式要与datepicker中的日期格式一致(yyyy/mm/dd)

function disableSpecificDays(date) {
    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
    if (typeof(disabledDays) != "undefined") {
        for (var i = 0; i < disabledDays.length; i++) {
            if($.inArray(y + '/' + (m+1) + '/' +d ,disabledDays) != -1) {
                return [false];
            }
        }
    }
    return [true];
}

//2、另一种写法

//先拿到不能被点击的日期数组集合;
var disabledDays=["2017-06-18","2017-06-16","2017-05-20"];

$("#datepicker" ).datepicker({
    dateFormat: "yy/mm/dd",
    beforeShowDay: function(date){
        //date是插件返回的日期2017/6/18,匹配的时候要注意格式
        var dateText=(new Date(date.replace(/[-]/g,"/"))).Format ("yyyy-MM-dd");
        //为了大家方便,在下面附上Format()函数的定义,大家也可以像1上面那样去匹配;
        if($.inArray(dateText, disabledDays)!=-1){
            return [false];
        }
        return [true];
    }
});

参数说明:

beforeShowDay : function(date){}:

在日期控件显示面板之前,每个面板上的日期绑定时都触发此事件,参数为触发事件的日期。
调用函数后,必须返回一个数组:
[0]此日期是否可选(true/false),
[1]此日期的CSS样式名称(""表示默认),
[2]当鼠标移至上面出现一段提示的内容。

初始:$('.selector').datepicker({ beforeShowDay: function(date) { ... } });

//貌似第二种写法个人认为更容易理解,这个也是小编在做项目时所用的方法,大家可按照自己喜好去用

//Format()日期格式化函数:

// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
// 例子: 
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

调用:
var time1 = new Date().Format("yyyy-MM-dd");
var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");
微信公众号
微信公众号:
  • 前端全栈之路(微信群)
前端QQ交流群
前端QQ交流群:
  • 794324979
  • 734802480(已满)

更多文章

栏目文章


Copyright © 2014-2023 seozhijia.net 版权所有-粤ICP备13087626号-4