我有以下代码可以在附加到输入的日期选择器上正常工作,但在与内联日期选择器一起使用时不会运行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();
}
});
答案 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缺少它需要的输入元素。