【问题标题】:jquery - beforeshow and beforeshowday on an inline datepickerjquery - 内联日期选择器上的 beforeshow 和 beforeshowday
【发布时间】:2013-02-20 12:56:31
【问题描述】:

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

【问题讨论】:

  • “内联日期选择器”是什么意思?
  • &lt;div class='mydate'&gt;&lt;/div&gt;
  • 一个根据选择菜单中的选项填充的数组
  • 它会产生一个错误,所以你需要发布它来自哪里,startDates 来自哪里。换句话说,一个完整的代码示例。最好是一个工作的jsFiddle。哦,你想要 beforeShow 和 beforeShowDay 实际做什么?

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


【解决方案1】:

我通过 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 文档,听起来好像需要一个输入字段以及日期选择器。我看到您正在阅读选择元素,但我认为 beforeShow 缺少它需要的输入元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多