【问题标题】:jQuery PickMeUp datepicker: disable array of datesjQuery PickMeUp datepicker:禁用日期数组
【发布时间】:2014-02-17 23:36:15
【问题描述】:

我正在使用一个名为 PickMeUp 的 jQuery 日期选择器插件。

我可以使用日期选择器,但不知道如何禁用其中的日期。我的计划是在日期选择器日历上设置一组日期。

我确实设法使用以前版本的插件 (http://www.eyecon.ro/datepicker/) 中的文档禁用了一个日期,但我不知道如何向其中添加一组日期。

jQuery

​​>
    $(document).ready(function(){   
        var now2 = new Date();
        now2.addDays(-1);
        now2.setHours(0,0,0,0);
        $('input#cdate').pickmeup({
        position  : 'right',                                        
            mode      : 'range',                        
            render: function(date) {
                return {
                    disabled: date.valueOf() == now2.valueOf()                          
                }
            }                           
        }); 
    }); 

更新

下面是工作代码。 (非常感谢Niloct

    $(document).ready(function(){   
        var arDates = [new Date("2014-02-14").valueOf(),new Date("2014-02-11").valueOf(),new Date("2014-02-09").valueOf()];
        $('input#cdate').pickmeup({
        position  : 'right',                                        
            mode      : 'range',                        
            render: function(date) {
                return {
                    disabled: arDates.indexOf(date.valueOf()) != -1                         
                }
            }                           
        }); 
    }); 

【问题讨论】:

  • 假设你有一个日期数组arDates,每个日期都有.valueOf()而不是对象,如果你在最后一行说disabled: arDates.indexOf(date.valueOf()) != -1会发生什么?
  • 好的...我将如何编写数组?像这样? var arDates = ["2014-02-14","2014-02-11","2014-02-10"];
  • 而不是日期字符串,设置例如new Date("2014-02-14").valueOf() 第一个。你的日历也有时间吗?先试试这个。
  • 哈哈,好像可以了!!!非常感谢你:)))

标签: jquery datepicker


【解决方案1】:

好的,写下来吧:

valueOf()Date 对象的方法之一,用于获取日期中的毫秒数(自 1970 年 1 月 1 日起)。

indexOf()Array 对象的一个​​方法,用于检查元素是否是数组的成员。

所以你的第一个代码是正确的,你也得到了调整:

var arDates = [new Date("2014-02-14").valueOf(),new Date("2014-02-11").valueOf(),new Date("2014-02-09").valueOf()];

disabled: arDates.indexOf(date.valueOf()) != -1

可能面临的是时区问题。例如:new Date("2014-02-17") 对我来说不会在 2 月 17 日创建日期。由于我的时区,它回退了 3 个小时。

【讨论】:

    【解决方案2】:

    您显然已经解决了这个问题,但是,为了将来参考,这里对问题进行了一点扩展,其中还向日期数组添加了一个新类。这是因为PickMeUp 禁用日期的默认配色方案是黑色;这使得很难看到它们。此外,我还添加了一个小技巧来取消选择当前日期。这是因为默认情况下,PickMeUp 选择当前日期,这可能是不可取的。

    下面的 Javascript/jQuery 实现了你想要的:

    // Creating some 'sample' dates 
    var datesArray = [];
    var d = new Date();
    for (i = 2; i < 7; i++) {
        var tempDay = new Date(); tempDay.setHours(0,0,0,0);
        tempDay.setDate(d.getDate()+i);
        datesArray.push(tempDay.getTime());
    }
    
    $(function () {
        $('.multiple').pickmeup({
            flat: true,
            mode: 'multiple',
            // Before rendering each date, deselect dates if in the array
            render: function(date) {
                if ($.inArray(date.getTime(), datesArray) > -1){
                    return {
                        disabled   : true,
                        class_name : 'disabled'
                    }
                }
            }
        });
    });
    // Little hack to deselect current day: PickMeUp forces you to have a default date :(
    $('.pmu-today').click();
    

    用下面的CSS让它看起来更直观:

    .disabled {
        color: #5C5C8A !important;
        background: #000033;
    }
    

    DEMO

    【讨论】:

      猜你喜欢
      • 2014-12-30
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多