2014-01-23 64 views
3

我有一個Kendo網格,我想檢測右鍵單擊和左鍵單擊,所以基於這些我做了兩件獨立的事情。我以前從網格中獲取ID,無論是左鍵還是右鍵單擊,並且工作正常。但要修復IE11點擊問題,我不得不更新kendo.js到2013.2.716版本,之後,它檢測到左/右點擊所有權利,但對於「右鍵點擊」無法獲得選定的行ID。以下是我的代碼來檢測左/右擊和PlodId是我的網格中的一列:在Kendo Grid中點擊右鍵獲取選定的行

function LoadMainShiftGrid() { 

//For Right Click --> Delete Selected Shift 

$("#shiftReport").delegate("tbody>tr", "contextmenu", function (e) { 
    if (e.which == 3) { 
     $("#plodDetails").hide();    
     var gridData = $('#shiftReport').data("kendoGrid"); 
     var selectedRowData = gridData.dataItem($('.k-grid').find("tr.k-state-selected")); 

    // MY PROBLEM FOR RIGHT CLICK SELECTEDROWDATA COMES TO NULL <<<< 

     var SelectedPlodId = selectedRowData.PlodId;       
    } 
}); 

//For Left Click --> Show Plod Detials 

$("#shiftReport").delegate("tbody>tr", "click", function (e) { 
    if (e.which == 1) { 
     var gridData = $('#shiftReport').data("kendoGrid"); 
     var selectedRowData = gridData.dataItem($('.k-grid').find("tr.k-state-selected")); 
     var SelectedPlodId = selectedRowData.PlodId;   
    } 
}); 
} 

在此先感謝您。

回答

5

我已經將點擊綁定功能更改爲'mousedown',並手動選擇該行(謝謝@ drw85的想法),之後它工作正常。

function LoadMainShiftGrid() { 

$('#shiftReport').data('kendoGrid').tbody.on('mousedown', function (e) { 

    //select the clicked row manually; this resolves all problem :D 
    $('#shiftReport').data("kendoGrid").select(e.target.parentElement); 

    if (e.which == 3) { 
     $("#plodDetails").hide();    
     var gridData = $('#shiftReport').data("kendoGrid"); 
     var selectedRowData = gridData.dataItem($('.k-grid').find("tr.k-state-selected"));  
     var SelectedPlodId = selectedRowData.PlodId;       
    } 

    //For Left Click --> Show Plod Details  
    if (e.which == 1) { 
     var gridData = $('#shiftReport').data("kendoGrid"); 
     var selectedRowData = gridData.dataItem($('.k-grid').find("tr.k-state-selected")); 
     var SelectedPlodId = selectedRowData.PlodId;   
    } 
}); 
} 
+0

我可以知道什麼是#shiftReport? – UserA1195

+0

@ UserA1195它的HTML標識你將會鉤住劍道網格。 – Mahib

1

我認爲會發生這種情況,因爲右鍵單擊並不會真正選擇該行。 您可以通過代碼選擇它,你嘗試通過

var selectedRowData = gridData.dataItem($('.k-grid').find("tr.k-state-selected")); 

您應該能夠通過事件對象來獲取點擊的目標,並通過劍道在其上設置選擇的屬性來獲取它。

var index = gridData.find(e.delegateTarget).index(); 
var dataItem = gridData.dataSource.view()[index]; 
dataItem.selected(); 

您可能必須將true傳遞給所選函數。

+0

任何建議如何? – Mahib

+0

如果你可以提供一個jsfiddle的例子,我會再看一次。 – drw85

+0

hmmn ..謝謝你的幫助..它沒有工作「在js它說,沒有方法'發現'」..但從你的想法我想出瞭解決方案。 – Mahib

0

使用.Selectable()將高亮度行,當你將鼠標懸停在列,點擊任何特定行,示例代碼:

@(Html.Kendo().Grid(Model) 
      .Name("Grid") 
      .DataSource(datasource => datasource 
       .Ajax() 
       .ServerOperation(false) 
       .PageSize(15) 
      ) 
      .Sortable() 
      .Columns(columns => 
      { 
       columns.Bound(model => model.NetworkID); 
       columns.Bound(model => model.FirstName); 
       columns.Bound(model => model.LastName); 
      }) 
      .Filterable() 
      .Scrollable(s => s.Height(550)) 
      .Pageable() 
      .Resizable(resize => resize.Columns(true)) 
      .Selectable() 
    ) 
0

在IE 11,這將工作

$("#grid").kendoGrid({ 
change: function(e) { 
var selected = this.select(); 
var selectedDataItems = []; 
for (var i = 0; i < selected.length; i++) { 
    var dataItem = this.dataItem($(selected[i]).closest("tr")); 
    selectedDataItems.push(dataItem); 
} 
} 
});