jQuery - 内联日期选择器上的beforeshow和beforeshowday

3
我有以下代码,它在附加到输入框的日期选择器上运行良好,但在与内联日期选择器一起使用时不运行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();
        }
    });

“inline datepicker” 是什么意思? - Konstantin Dinev
<div class='mydate'></div> - Tom
一个数组,根据选择菜单中的选项填充。 - Tom
它会生成一个错误,因此您需要发布它来自哪里,startDates来自哪里。换句话说,是完整的代码示例。最好提供一个工作的jsFiddle。哦,那么您想要beforeShowbeforeShowDay实际上做什么? - j08691
1个回答

0

我将这个代码通过JSLint检查,发现有一些缺少分号的地方,还有var i在第二个for循环中已经声明过了(需要从第二个for循环中移除var)。缺少分号的行:

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

它还返回了这一行缺少基数参数。基数是指值所在的进制(十进制、二进制、十六进制等)。如果您只想要十进制,请在val()和parseInt()函数的末尾添加,10,如下所示

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

我怀疑这些更改不会修复它,但值得一试。

我进一步研究了一下,它将在 beforeShow 的情况下运行,但当我添加 beforeShowDay 时它不显示。

我看了一会儿代码和 API 文档,听起来需要一个输入字段和日期选择器。我看到你正在从选择元素读取,但我认为 beforeShow 缺少需要的输入元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接