【问题标题】:JQuery DatePicker and beforeShowDayJQuery DatePicker 和 beforeShowDay
【发布时间】:2013-01-07 04:40:19
【问题描述】:

我正在拼命尝试使用此功能在我的日期选择器中仅启用特定日期,但永远不会触发 beforeShowDay 函数:(

即使这样也不行:

$(document).ready(function(){
    /*initialisation des composants*/
    initComponent();
});


availableDates = new Array();

/* Fonction d'initialisation des composants */
function initComponent(){
    /* Date retrait */
    $("#dateRetrait").datepicker();

    $("#dateRetrait").datepicker({beforeShowDay: function(d) {
        console.log("bsd");
        alert("bsd");
    }});

    //$("#dateRetrait").datepicker({buttonImage: "../../../Images/boutons/btn_calendier.png"});
    //$("#dateRetrait").datepicker({showButtonPanel: true });
    //$("#dateRetrait").datepicker({beforeShow: function() {setTimeout(function() {$(".ui-datepicker").css("z-index", 9999999999);}, 10);}});

    $('#comboLieux').attr('disabled', 'disabled');
    $('#comboCreneau').attr('disabled', 'disabled');
    $('#dateRetrait').attr('disabled', 'disabled');
    $('#dateRetrait').datepicker('option', 'minDate', new Date());

    $("#dateRetrait").datepicker("option","dateFormat", 'dd-mm-yy');
}

如果您有任何想法,我将不胜感激!

事实上,即使这样也行不通:

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>jQuery UI Datepicker - Restrict date range</title>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.0/themes/base/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
    <script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
    <link rel="stylesheet" href="/resources/demos/style.css" />
    <script>
      $(function() {
        $( "#datepicker" ).datepicker({ minDate: -20, maxDate: "+1M +10D" });
        $( "#datepicker" ).datepicker({beforeShowDay: function(d) {
          console.log(d);
          alert(d);
        }});
      });
    </script>
  </head>
  <body>
    <p>Date: <input type="text" id="datepicker" /></p>
  </body>
</html>

【问题讨论】:

  • 还有你的js的其余部分是什么样子的,特别是你调用函数的部分:initComponent()?
  • 我',刚刚在问题中添加了代码
  • 最后,您要启用哪些日期?
  • 事实上我有一个包含允许日期的数组和这个代码: $("#dateRetrait").datepicker({beforeShowDay: function(d) { var dmy = (d.getMonth()+1 ); if(d.getMonth()

标签: jquery datepicker


【解决方案1】:

根据jQueryUI's Datepicker API,

这就解释了原因

$("#dateRetrait").datepicker({beforeShowDay: function(d) {
        console.log("bsd");
        alert("bsd");
    }});

不起作用。

我还注意到你多次调用.datepicker(),每次你给它不同的参数。

代替:

$("#dateRetrait").datepicker();

$("#dateRetrait").datepicker({beforeShowDay: function(d) {
        console.log("bsd");
        alert("bsd");
    }});

$('#dateRetrait').datepicker('option', 'minDate', new Date());

$("#dateRetrait").datepicker("option","dateFormat", 'dd-mm-yy');

尝试这样做:

$("#dateRetrait").datepicker({
    dateFormat: 'dd-mm-yy',
    minDate: new Date(), 
    beforeShowDay: function(d) {
        var dmy = (d.getMonth()+1); 
        if(d.getMonth()<9) 
            dmy="0"+dmy; 
        dmy+= "-"; 

        if(d.getDate()<10) dmy+="0"; 
            dmy+=d.getDate() + "-" + d.getFullYear(); 

        console.log(dmy+' : '+($.inArray(dmy, availableDates)));

        if ($.inArray(dmy, availableDates) != -1) {
            return [true, "","Available"]; 
        } else{
             return [false,"","unAvailable"]; 
        }
    }
    });

我还为您提供了一个演示:http://jsfiddle.net/yTMwu/18/。希望这会有所帮助!

【讨论】:

  • 你是我的上帝!!!!我不认为多次调用会惹恼组件...非常感谢!!!
  • 哈哈没问题。以后一定要打一次.datepicker()。编码愉快!
  • 如果您有多个使用该 datepicker() 的 id 会中断吗?
【解决方案2】:

传递给回调函数的日期是一个成熟的日期和时间。因此,如果您希望将其与短日期字符串进行比较,则必须转换其中之一。日期选择器的 beforeShowDay 属性部分的这个 sn-p 证明了转换是必要的。在这里,我只是简单地禁用日历上的一个日期来证明这一点。

                beforeShowDay: function(date) {
                var dd = date.getDate();
                var mm = date.getMonth()+1; //January is 0!
                var yyyy = date.getFullYear();
                var shortDate = mm+'/'+dd+'/'+yyyy;
                var test = "12/30/2014";
                if (shortDate == test) {
                    return [false, "" ];
                } else {
                    return [true, "" ];
                }
            }

【讨论】:

    【解决方案3】:

    Dom 给出了很好的解释。我想添加更多的缩短代码:

    如果您有 availableDates 数组,格式为:0000-00-00 (yyyy-mm-dd)

    var availableDates = ["2020-01-05", "2020-01-10", "2020-01-14"];
    
    $("#dateRetrait").datepicker({
        dateFormat: 'dd-mm-yy',
        minDate: new Date(), 
        beforeShowDay: function(d) {        
            var year = d.getFullYear(),
                month = ("0" + (d.getMonth() + 1)).slice(-2),
                day = ("0" + (d.getDate())).slice(-2);
    
            var formatted = year + '-' + month + '-' + day;
    
            if ($.inArray(formatted, availableDates) != -1) {
                return [true, "","Available"]; 
            } else{
                return [false,"","unAvailable"]; 
            }
        }
    });
    

    beforeShowDay - 每次都有效,在渲染日之前))

    $.inArray - 在数组中查找值(如果没有值,则为 -1)

    在这个解决方案中,您可以制作stopDates,只需换行:

    if ($.inArray(formatted, availableDates) != -1) {
    

    if ($.inArray(formatted, availableDates) == -1) {
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2017-04-20
    • 2017-12-12
    • 2010-11-22
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多