函数第一次未启动

Function not firing first time around

本文关键字:启动 第一次 函数      更新时间:2023-09-26

我正在使用Kendo控件(特别是GridDrop Down Lists)。

由于Kendo Grid组件上没有用于双击事件的内置处理程序,因此我编写了一些JQuery来解决这个问题。

通过查看浏览器控制台,我可以看到双击事件被触发,以及从网格中提取的相关数据项。

问题在于从双击函数中调用的applySelections。我想根据所选行的数据,从六个Kendo Drop Downs中预先选择值。在此之后,我在每个下拉列表上触发change事件以应用相关过滤器。

$(document).ready(function () {
    var grid = $("#grid").data("kendoGrid");
    grid.tbody.on("dblclick", "tr", function (e) {
        var test = grid.dataItem(this);
        applySelections(grid.dataItem(this));            
    });
    function applySelections(item) {
        $('#ddl1').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[0].ID;
        });
        $('#ddl2').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[1].ID;
        });
        $('#ddl3').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[2].ID;
        });
        $('#ddl4').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[3].ID;
        });
        $('#ddl5').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[4].ID;
        });
        $('#ddl6').data('kendoDropDownList').select(function (dataItem) {
            return dataItem.ID === item.subItems[5].ID;
        });
        $("#ddl1").data("kendoDropDownList").trigger("change");
        $("#ddl2").data("kendoDropDownList").trigger("change");
        $("#ddl3").data("kendoDropDownList").trigger("change");
        $("#ddl4").data("kendoDropDownList").trigger("change");
        $("#ddl5").data("kendoDropDownList").trigger("change");
        $("#ddl6").data("kendoDropDownList").trigger("change");
    }
}

在第一次双击时,我已经跟踪了代码,可以看到正在执行的初始双击函数。但是,applySelections函数中没有任何select事件被触发。下一次,对每个下拉菜单执行相同的代码,并观察预期的结果。

经过进一步检查,结果发现解决方案相对简单(而且明显)。下拉控件autoBind值设置为false,这意味着我的select事件与select无关。

更改:

var ddl1 = $("#ddl1").kendoDropDownList({
    autoBind: false
    ...
}).data("kendoDropDownList");

至:

var ddl1 = $("#ddl1").kendoDropDownList({
    autoBind: true
    ...
}).data("kendoDropDownList");

对于每个下拉控件,强制在页面加载时填充CCD_。

我很惊讶,在尝试选择一个还不存在的元素时,我没有收到任何web浏览器错误。