Twitter bootstrap 引导日期选择器-禁用日期-多个日期选择器

Twitter bootstrap 引导日期选择器-禁用日期-多个日期选择器,twitter-bootstrap,datepicker,Twitter Bootstrap,Datepicker,我正在为datepicker()使用一个引导插件。 当您转到上面的链接时,会有一个代码示例,说明如何制作一个简单的签入签出表单。在签出日期选择器上,签入日期选择器之前的所有日期都被禁用 在我的网站上有多个签入签出表单(用于多个房间)。每个房间都有一个入住和退房日期选择器(情侣)。所以我认为下面的代码可以做到这一点 创建一个包含页面上所有日期选择器的数组(可以是变量)。然后每2个循环一次数组,每对应用代码 if ($('.datepicker').length) { //get all the

我正在为datepicker()使用一个引导插件。 当您转到上面的链接时,会有一个代码示例,说明如何制作一个简单的签入签出表单。在签出日期选择器上,签入日期选择器之前的所有日期都被禁用

在我的网站上有多个签入签出表单(用于多个房间)。每个房间都有一个入住和退房日期选择器(情侣)。所以我认为下面的代码可以做到这一点

创建一个包含页面上所有日期选择器的数组(可以是变量)。然后每2个循环一次数组,每对应用代码

if ($('.datepicker').length) { 
//get all the datepickers
var IDs = [];
$(".main").find(".datepicker").each(function(){ IDs.push(this.id); });

for(j=0;j<IDs.length;j++){
    var nowTemp = new Date();
        var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);

        var checkin = $('#'+ IDs[j]).datepicker({
        onRender: function(date) {
                 return date.valueOf() < now.valueOf() ? 'disabled' : '';
        }
        }).on('changeDate', function(ev) {
        var newDate = new Date(ev.date)
        newDate.setDate(newDate.getDate() + 1);
        checkout.setValue(newDate);
        checkin.hide();
        $('#'+ IDs[j+1])[0].focus();
        }).data('datepicker');

        var checkout = $('#'+ IDs[j+1]).datepicker({
        onRender: function(date) {
            return date.valueOf() <= checkin.date.valueOf() ? 'disabled' : '';
        }
        }).on('changeDate', function(ev) {
        checkout.hide();
        }).data('datepicker');
    j++;
    }
}
if($('.datepicker').length){
//找所有的约会挑拣者
var-id=[];
$(“.main”).find(“.datepicker”).each(函数(){IDs.push(this.id);});

对于(j=0;j我一直在研究这个问题,我想我会发布答案,以防有人看到

它通过查找具有类“datepicker”的任何项来工作。如果该项的ID以“from”结尾,它将查找ID以“to”结尾的对应项。如果ID不以“from”或“to”结尾,它将绑定普通的日期选择器

我相信jquery大师可以做得更好;-)

外部JS:

function datepickerFromTo(fromSelector, toSelector, format) {
    var nowTemp = new Date();
    var now = new Date(nowTemp.getFullYear(), nowTemp.getMonth(), nowTemp.getDate(), 0, 0, 0, 0);

    var fromDate = $(fromSelector).datepicker({
        weekStart: 1,
        format: format,
        onRender: function (date) {
            return date.valueOf() < now.valueOf() ? 'disabled' : '';
        }
    }).on('show', function (ev) {
        toDate.hide();
    }).on('changeDate', function (ev) {
        if (ev.date.valueOf() > toDate.date.valueOf()) {
            var newDate = new Date(ev.date)
            newDate.setDate(newDate.getDate());
            toDate.setValue(newDate);
        }
        fromDate.hide();
        $(toSelector)[0].focus();
    }).data('datepicker');

    var toDate = $(toSelector).datepicker({
        weekStart: 1,
        format: format,
        onRender: function (date) {
            return date.valueOf() <= fromDate.date.valueOf() ? 'disabled' : '';
        }
    }).on('show', function (ev) {
        fromDate.hide();
    }).on('changeDate', function (ev) {
        toDate.hide();
    }).data('datepicker');
}
函数datepickerFromTo(从选择器到选择器,格式){
var nowTemp=新日期();
var now=新日期(nowTemp.getFullYear(),nowTemp.getMonth(),nowTemp.getDate(),0,0,0);
变量fromDate=$(fromSelector).datepicker({
周开始:1,
格式:格式,
onRender:函数(日期){
返回日期.valueOf()toDate.date.valueOf()){
var newDate=新日期(ev.Date)
newDate.setDate(newDate.getDate());
toDate.setValue(newDate);
}
fromDate.hide();
$(toSelector)[0]。焦点();
}).数据(“日期选择器”);
变量toDate=$(toSelector).datepicker({
周开始:1,
格式:格式,
onRender:函数(日期){
return date.valueOf()=4&&thisId.substr(thisId.length-4)=“from”){//ID以“from”结尾-将其视为“from”日期
var idRoot=thisId.substr(0,thisId.length-4);
var toDateSelector='#'+idRoot+'to';
变量toDate=$(toDateSelector);
if(toDate.length){//找到匹配的“截止日期”
datepickerFromTo(“#”+thisId,toDateSelector,'dd/mm/yyyy');
}
}如果(!thisId.length>=2&&thisId.substr(thisId.length-2)==“to”){//绑定普通日期选择器,则排除ID以“to”日期结尾的任何内容,因为绑定“from”日期时会处理此问题。
$(此).datepicker({
周开始:1,
格式:“dd/mm/yyyy”
});
}
});
<script>
$('.datepicker').each(function() {
    var thisId = $(this).attr("id");

    if(thisId.length >= 4 && thisId.substr(thisId.length - 4) == "from") { // The ID ends with 'from' - treat it as a 'from' date
        var idRoot = thisId.substr(0, thisId.length - 4);
        var toDateSelector = '#' + idRoot + 'to';
        var toDate = $(toDateSelector);
        if(toDate.length) { // Found a matching 'to date'
            datepickerFromTo('#' + thisId,toDateSelector,'dd/mm/yyyy');
        }
    } else if(!thisId.length >= 2 && thisId.substr(thisId.length - 2) == "to") { // Bind an ordinary datepicker. Exclude anything with ID ending with 'to' date as this is handled when binding 'from' date.
        $(this).datepicker({
            weekStart: 1,
            format: 'dd/mm/yyyy'
        });
    }
});
</script>