0

我正在为日期选择器(http://www.eyecon.ro/bootstrap-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++;
    }
}

结果是,如果我在页面上有 2 个日期选择器,则第二个按预期工作。第一个根本没有。如果我在页面上有 1 个日期选择器,它可以工作。

添加警报(ID)时,我会根据需要以正确的顺序获得一个带有 ID 的数组。

如果有人可以帮助... :) 在此先感谢!

4

1 回答 1

0

我一直在努力,并认为我会发布答案以防万一有人在看。

它通过查找类“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');
}

在页面底部:

<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>
于 2014-09-29T15:22:54.120 回答