2016-07-19 139 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 ... –