【问题标题】:Bootstrap Datepicker - Disable dates - Multiple datepickersBootstrap Datepicker - 禁用日期 - 多个日期选择器
【发布时间】:2013-10-04 05:13:44
【问题描述】:

我正在为日期选择器 (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 的顺序正确。

如果有人可以帮助... :) 提前致谢!

【问题讨论】:

    标签: twitter-bootstrap datepicker


    【解决方案1】:

    我一直在努力解决这个问题,并认为我会发布答案以防万一有人在看。

    它的工作原理是寻找任何带有“datepicker”类的东西。如果该项目的 ID 以“from”结尾,则它会查找 ID 以“to”结尾的相应项目。如果 ID 不以 'from' 或 'to' 结尾,它会绑定一个普通的 datepicker。

    我相信 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-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2020-06-19
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多