我试图获取Kendo Grid的点击事件,这样我就可以将内容绑定到shift和ctrl click。我无法使用固有的多选Kendo,因为它不支持拖放。当我在dataBound事件之后创建一个函数时,我的函数在点击时被调用,但它不是典型的点击事件。
var onDataBound = function () {
selectItem.apply(this);
}
grid.dataBound = onDataBound;
var selectItem.apply = function (e) {
console.log(e);
}
有什么想法?提前谢谢。
答案 0 :(得分:8)
初始化Grid
后,您应该将处理程序绑定到click事件。
示例:
$("#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"
。
答案 1 :(得分: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
是您可以传递的绑定数据项。
答案 2 :(得分:0)
我知道这已经很老了,但是我相信所有解决方案都不能涵盖该事件也应用于表头的事实。例如,如果您具有表过滤器(按升/降序排列),则可能会导致问题。添加click事件的正确方法是以表主体为目标,如下所示:
$("#grid tbody").find("tr").click(addYourFunctionHere);
答案 3 :(得分:0)
如果您只想停止传播,只需调用 event .stopPropagation()或 event .stopImmediatePropagation();
function onRowDelete(dataItem) {
event.stopImmediatePropagation();
showConfirmation(dataItem);
}