You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kendo DatePicker使用前后切换按钮时日期文本消失问题求助

问题根因
  • 日期更新逻辑错误:代码中仅通过setDate()修改Date实例的日部分,未同步更新月份、年份字段,当选中的日期跨月/跨年时,会生成超出min/max限制的非法日期,Kendo DatePicker遇到非法值时会自动清空输入框内容。
  • 边界判断逻辑缺陷:仅对比getDate()返回的日数值,未校验月份、年份,会出现不同月的相同日期误判的问题,导致按钮禁用逻辑失效,进一步触发非法日期赋值。
修复方案

调整日期赋值、边界判断逻辑为基于完整Date实例操作即可,修正后的完整代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kendo UI Snippet</title>

    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.2.616/styles/kendo.default-v2.min.css"/>

    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2021.2.616/js/kendo.all.min.js"></script>
</head>
<body>
  
    <button id="btnPrevDate" type="button">prev</button>

    <div class="demo-section k-content d-inline-block">
         <input id="scheduleDatePicker" title="datepicker" class="w-100" />
    </div>

    <button id="btnNextDate" type="button">next</button>

    <script>
        $(document).ready(function(){
             var currentDate = new Date();
             var selectedDate = new Date(currentDate);
             var startDate = new Date(currentDate);
             var endDate = new Date(currentDate);

             startDate.setDate(currentDate.getDate() - 7);
             endDate.setDate(currentDate.getDate() + 7);
          
             $("#scheduleDatePicker").kendoDatePicker({
                value: selectedDate,
                min: startDate,
                max: endDate,
                change: function (e) {
                    var datepicker = $('#scheduleDatePicker').data('kendoDatePicker');
                    // 直接替换完整Date实例,不要仅修改日部分
                    selectedDate = new Date(datepicker.value());

                    // 用时间戳判断完整日期是否相等
                    $('#btnNextDate').prop('disabled', selectedDate.getTime() === endDate.getTime());
                    $('#btnPrevDate').prop('disabled', selectedDate.getTime() === startDate.getTime());
                }
             });
          
             $('#btnPrevDate').on('click', function () {
                var datepicker = $('#scheduleDatePicker').data('kendoDatePicker');
                // 基于当前选中日期生成新的日期实例
                var newDate = new Date(selectedDate);
                newDate.setDate(newDate.getDate() - 1);
                selectedDate = newDate;
                datepicker.value(selectedDate);

                $('#btnNextDate').prop('disabled', false);
                $(this).prop('disabled', selectedDate.getTime() === startDate.getTime());
             });
    
             $('#btnNextDate').on('click', function () {
                var datepicker = $('#scheduleDatePicker').data('kendoDatePicker');
                // 基于当前选中日期生成新的日期实例
                var newDate = new Date(selectedDate);
                newDate.setDate(newDate.getDate() + 1);
                selectedDate = newDate;
                datepicker.value(selectedDate);

                $('#btnPrevDate').prop('disabled', false);
                $(this).prop('disabled', selectedDate.getTime() === endDate.getTime());
             });
        });
    </script>
</body>
</html>
核心修改点
  • 所有日期更新逻辑均替换为生成新的Date实例,避免修改原有实例导致的字段不同步问题
  • 边界判断改用getTime()获取时间戳对比,确保是同一天才触发按钮禁用逻辑
  • 简化了重复的判断代码,降低逻辑出错概率

内容的提问来源于stack exchange,提问作者Anna Kegley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:36:03