在剑道网格中获取点击事件

Posted

技术标签:

【中文标题】在剑道网格中获取点击事件【英文标题】:getting the click event in a kendo grid 【发布时间】:2013-10-18 17:44:51 【问题描述】:

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

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


grid.dataBound = onDataBound;

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

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

【问题讨论】:

【参考方案1】:

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

例子:

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

你可以使用:

e.ctrlKey 用于检测是否按下了 ctrle.altKey 用于检测是否按下了 alte.shiftKey 用于检测是否按下了 shift

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

Jsfiddle example.

【讨论】:

【参考方案2】:

在声明网格时使用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 是您可以传递的绑定数据项。

【讨论】:

非常感谢!这是我的项目所需要的,并且对于未来的开发人员来说清晰易读。【参考方案3】:

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

$("#grid tbody").find("tr").click(addYourFunctionHere);

【讨论】:

【参考方案4】:

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

function onRowDelete(dataItem) 
           
    event.stopImmediatePropagation();

    showConfirmation(dataItem);        

【讨论】:

以上是关于在剑道网格中获取点击事件的主要内容,如果未能解决你的问题,请参考以下文章

剑道网格取消编辑事件

将点击事件绑定到剑道工具栏

剑道网格行选择更改事件?

将 onclick/ng-click 事件附加到网格数据绑定事件中的元素

当从输入框中删除最后一个字符时,事件未在剑道网格和角度 5 中触发?

剑道网格相当于 onEditComplete