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

jQuery:Kendo Grid下拉值变更时如何为内置Kendo DatePicker设置今日日期

Kendo网格下拉联动赋值解决方案

问题根因

  • 原有代码获取日期选择器的逻辑错误:closest() 方法用于向上查找祖先元素,而同行的 dateReceived 输入框是当前行节点下其他单元格的子元素,无法通过向上查找定位
  • Kendo网格批量编辑模式下,直接操作绑定的数据源比操作UI控件更稳妥,可避免DOM定位失效、编辑器未初始化等异常问题

最优解决方案(操作数据源自动同步UI)

直接修改当前行绑定的dataItem字段值,Kendo网格会自动同步对应UI显示、自动标记脏数据,完全适配批量编辑逻辑,不需要手动查找日期控件实例,修改后的编辑器函数代码如下:

function medRecRcvdDropDownEditor(container, options) {
    $('<input required name="' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: true,
            dataTextField: "MedRecRcvdName",
            dataValueField: "MedRecRcvdId",
            change: function (e) {
                var value = this.value();
                if (value != null && value == "Y") {
                    var grid = e.sender.element.closest(".k-grid").data("kendoGrid");
                    var row = e.sender.element.closest("tr");
                    // 获取当前行绑定的数据项
                    var dataItem = grid.dataItem(row);
                    // 直接给dateReceived字段赋值,网格会自动更新对应列的UI和编辑器值
                    dataItem.set("dateReceived", new Date());
                }            
            },
            dataSource: {
                transport: {
                    read: function (e) {
                        e.success(datasource);
                    }
                }
            }
        });
}

可选方案(修复控件查找逻辑)

如果你确实需要直接操作日期选择器实例,只需要修正DOM查找逻辑即可,将原来的向上查找改为在当前行范围内向下查找:

// 把原有change事件中的日期控件查找代码替换为下面的内容
var row = e.sender.element.closest("tr");
var medRecdtPicker = row.find("[name='dateReceived']").data("kendoDatePicker");
if(medRecdtPicker) { // 增加判空逻辑避免编辑器未初始化时报错
    medRecdtPicker.setDate(new Date());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:12:01