jquery - beforeshow和beforeshowday on inline datepicker

时间:2013-02-20 12:56:32

标签: jquery jquery-ui jquery-ui-datepicker

我有以下代码可以在附加到输入的日期选择器上正常工作,但在与内联日期选择器一起使用时不会运行beforeshow和beforeshowday部分。

我该怎么做才能解决这个问题?

$('.mydate').datepicker({
        showWeek: true,
        firstDay: 1,
        dateFormat: 'yy, m, d',
        minDate: 0,
        maxDate: '+2Y',
        showOtherMonths: true,
        selectOtherMonths: true,
        numberOfMonths: 2,
        beforeShow: function(input, inst) {
            selectdatesElem = $(input).siblings("div").find("select.startdates");
            $(input).siblings("div").find("select.startdates").find("option").each( function() {
                  startDates.push($(this).val())
            });
            $(input).siblings("div").find("select.availdates").find("option").each( function() {
                  eventDates.push($(this).val())
            });
        },
        beforeShowDay: function(date) {
            for (var i = 0; i < eventDates.length; i++) {
                  if (date.getFullYear()+", "+date.getMonth()+", "+date.getDate() == eventDates[i]) {
                        return [false, 'eventDay'];
                  } 
            }
            for (var i = 0; i < startDates.length; i++) {
                  if (date.getFullYear()+", "+date.getMonth()+", "+date.getDate() == startDates[i]) {
                        return [true, 'eventDay'];
                  }
            }
            return [false, ''];
        }, 
        onSelect: function(dateText, input, inst) {
            var selectedDateParts = dateText.split(',');
            selectdatesElem.val(parseInt(selectedDateParts[0]) + ", " + (parseInt(selectedDateParts[1])-1) + ", " + parseInt(selectedDateParts[2])).change();
        }
    });

1 个答案:

答案 0 :(得分:0)

我把它放在JSLint中,然后返回了一些缺少的分号,并且已经声明了var i(从第二个for循环中删除var)。缺少分号的行:

startDates.push($(this).val())
eventDates.push($(this).val())

它还返回此行缺少基数参数。基数是值的基数(十进制,二进制,十六进制等)。如果你只想要十进制加,10到val()和parseInt()函数的结尾,就像这样

selectdatesElem.val(parseInt(selectedDateParts[0], 10) + ", " + (parseInt(selectedDateParts[1], 10) - 1) + ", " + parseInt(selectedDateParts[2],10 ),10).change();

我怀疑这些变化会解决它,但值得一试。

我对它进行了更多调查,它将在beforeShow中运行,但是当我添加beforeShowDay时它不会显示。

我看了一段时间的代码和api文档,听起来像需要一个输入字段和datepicker。我看到你正在读取select元素,但我认为beforeShow缺少它需要的输入元素。