2016-07-19 93 views
3

我正在使用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事件都没有被触发。下一次,每个下拉菜单执行相同的代码,并观察预期的结果。

+1

良好的工作,所以... upvote for you ... – DiniZx

+1

到目前为止工作出色。继续保持,U会到达#believe(Upvote for you) –

+1

梦幻般的工作实验室。保持呃点亮。 –

回答

1

经过进一步检查,结果证明是相对直接的(并且很明显)。下拉控件autoBind的值设置为false,这意味着我的select事件没有任何内容到select

更改:

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

到:

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

每个下拉控制而被迫dataSource要在页面加载填充。

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

+0

好的工作让你... upvote for you ... –