我们的客户想要一个剑道网格,他可以点击一行中的任意位置打开相应的详细信息页面。我正在添加如下行:
const cols = [
{ field: "Date", title: "Date", template: "#=kendo.toString(kendo.parseDate(Date, 'yyyy-MM-dd), 'dd.MM.yyyy')#" },
{ field: "Title", title: "Title" },
{ field: "", command: ["destroy"], title: " " }];
let grid = $("#grid").kendoGrid({
dataSource: this.dataSource,
pageable: true,
filterable: true,
sortable: true,
columns: cols,
editable: "detail"
}).data("kendoGrid");
grid.one("dataBound", this.onDataBound.bind(this));
在我的函数onDataBound()
中:
const grid = $("#grid").data("kendoGrid");
$(grid.tbody).on("click", "tr", function (e) {
const rowData = grid.dataItem(this);
const URL = startInfo.ApplicationRoot + "SomeDetailPage?SomeId=" + rowData.get("SomeId");
window.open(URL, '_blank');
});
这完全符合预期。但是,如您所见,我有一个带删除按钮的列。这是问题所在。每当我点击删除按钮时,我都会收到确认消息("您确定要删除[...]吗?")并且实际可以删除行成功,但单击按钮后行的详细信息页面就会打开。
当我点击删除按钮时,如何让该行知道它不应该打开详细信息页面?
答案 0 :(得分:0)
你应该使用e.stopPropagation();在删除按钮上,所以它也不会将事件传递给行。
答案 1 :(得分:0)
我找到了解决方案。将click函数绑定到行时,我可以检查tagName
:
$(grid.tbody).on("click", "tr", function (e) {
if (e.target.tagName == "TD") {
const URL = startInfo.ApplicationRoot + "SomeDetailPage?SomeId=" + rowData.get("SomeId");
window.open(URL, '_blank');
}
});
当我点击按钮时,tagName
得到" SPAN"或" A"。按钮外的所有内容都会导致" TD"。