8

我正在尝试获取 Kendo Grid 的单击事件,以便我可以将内容绑定到 shift 和 ctrl 单击。我不能使用 Kendo 提供的固有多选,因为它不支持拖放。当我在 dataBound 事件之后创建一个函数时,我的函数在点击时被调用,但这不是典型的点击事件。

var onDataBound = function () {
    selectItem.apply(this);
}

grid.dataBound = onDataBound;

var selectItem.apply = function (e) {
    console.log(e);
}

有什么想法吗?提前致谢。

4

4 回答 4

10

初始化后,Grid您应该将处理程序绑定到单击事件。

例子:

$("#grid").on("click", "table", function(e) {
    console.log("clicked", e.ctrlKey, e.altKey, e.shiftKey);
});

您可以使用:

  • e.ctrlKey用于检测是否ctrl被按下。
  • e.altKey用于检测是否alt被按下。
  • e.shiftKey用于检测是否shift被按下。

如果您只想检测表格正文中的点击,您可以替换"table""tbody"甚至"td"

Jsfiddle 示例

于 2013-10-10T20:46:59.543 回答
3

dataBound声明网格时使用事件:

grid = $("#grid").kendoGrid({
    ...
    ,dataBound=onDataBound
});

var onDataBound = function(e)
{
    $("#grid").find("tr").click(selectItem.apply);
};

var selectItem.apply = function (e) {
    var dataItem = $("#grid").data("kendoGrid").dataItem(this);
    if(e.ctrlKey)
       alert('Ctrl + click on ' + dataItem.column1);
}

dataItem是您可以传递的绑定数据项。

于 2013-10-10T21:00:56.050 回答
0

如果您只想停止传播,只需调用event .stopPropagation() 或event .stopImmediatePropagation();

function onRowDelete(dataItem) {
           
    event.stopImmediatePropagation();

    showConfirmation(dataItem);        
}
于 2020-08-06T06:58:46.980 回答
0

我知道这已经很老了,但我相信没有一个解决方案涵盖了事件也被应用于表头的事实。例如,如果您有表格过滤器(按升序/降序排序),这可能会导致问题。添加点击事件的正确方法是定位表体,如下所示:

$("#grid tbody").find("tr").click(addYourFunctionHere);
于 2019-01-24T12:42:22.693 回答