1.beforeEdit事件
在编辑器创建之前,点击编辑或创建数据时触发,可以用于自定义逻辑,阻止编辑。
参数:
- e.model:选中当前要编辑的数据,可以使用isNew()方法来检查数据项是新建还是编辑
- e.sender:当前kendoGrid实例
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id" },
{ field: "name" },
{ field: "age" },
{ command: "edit" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: {
id: "id",
fields: {
"id": { type: "number" }
}
}
}
},
editable: "popup",
toolbar:["create"],
beforeEdit: function(e) {
//console.log('sneder',e.sender);
//console.log('model',e.model);
if (!e.model.isNew()) { //判断是否为新增
e.preventDefault();
}
}
});
</script>
2.edit事件
用户编辑或创建数据时触发。
参数:
- e.model:选中当前要编辑的数据,可以使用isNew()方法来检查数据项是新建还是编辑。
- e.sender:当前kendoGrid实例。
- e.container:编辑容器的JQ对象,根据编辑模式的不同,容器也是不同的。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id" },
{ field: "name" },
{ field: "age" },
{ command: "edit" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: {
id: "id",
fields: {
"id": { type: "number" }
}
}
}
},
editable: "popup",
toolbar:["create"],
edit: function(e) {
if (!e.model.isNew()) {
var numeric = e.container.find("input[name=id]").data("kendoNumericTextBox");
numeric.enable(false);
}
}
});
</script>
3.cellClose事件
当使用incell编辑模式,并且在单元格将要关闭时触发。事件在保存或取消更改后触发,但是在单元格关闭之前触发。
参数:
- e.model:选中当前要编辑的数据,可以使用isNew()方法来检查数据项是新建还是编辑。
- e.sender:当前实例。
- e.container:编辑容器元素的JQ对象。
- e.type:单元格关闭操作的类型,可以是保存或取消。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: { id: "id" }
}
},
editable: true,
cellClose: function(e) {
console.log(e.type);
console.log(e.model); //改变后的值
}
});
</script>
4.change事件
用户在选择行或单元格时触发。this关键字被设置为当前实例。
参数:
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
selectable: "multiple, row",
change: function(e) {
//选中当前行
var selectedRows = this.select();
var selectedDataItems = [];
for (var i = 0; i < selectedRows.length; i++) {
var dataItem = this.dataItem(selectedRows[i]);
selectedDataItems.push(dataItem);
}
//选中的数据
console.log(selectedDataItems);
//选中的ID (选中的为DataSource中schema中ID的值)
var _select = this.selectedKeyNames();
}
});
</script>
5.cancel事件
用户点击取消按钮或关闭弹出窗口时触发。
参数:
- e.model:选中当前要编辑的数据,可以使用isNew()方法来检查数据项是新建还是编辑。
- e.sender:当前实例
- e.container:编辑容器元素的JQ对象
- e.preventDefault:调用阻止取消操作。表格保持编辑模式。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" },
{ command:'edit' }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: { id: "id" }
}
},
editable: "popup",
cancel: function(e) {
e.preventDefault()
}
});
</script>
6.remove事件
当用户点击删除命令,并在确认窗口中确认删除时触发。
参数:
- e.model:选中的数据项。
- e.row:当前表格行的JQ对象。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" },
{ command: "destroy" }
],
dataSource: {
data:[
{ id: 1, name: "Jane Doe", age: 30},
{ id: 2, name: "John Doe", age: 33}
],
schema: {
model: { id: "id" }
}
},
editable: true,
remove: function(e) {
console.log("Removing", e.model);
}
});
</script>
7.save事件
数据项被保存时触发。
参数:
- e.model:被绑定到的数据项。如果e.model.id为空,则新创建的行将被保存。
- e.container:当前编辑容器元素的JQ对象。
- e.values:用户输入的值。仅在editable.mode选项设置为incell时可用。
- e.sender:当前实例。
- e.preventDefault:调用阻止保存操作。在incell中,编辑后的表格单元格将退出编辑模式。在"inline"和"pupop"编辑模式下,编辑表格将保持打开状态。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" },
{ command: "destroy" }
],
dataSource: {
data:[
{ id: 1, name: "Jane Doe", age: 30},
{ id: 2, name: "John Doe", age: 33}
],
schema: {
model: { id: "id" }
}
},
editable: true,
save: function(e) {
if (e.values.name !== "") {
if (e.values.name !== e.model.name) {
console.log("name is modified");
}
} else {
e.preventDefault();
console.log("name cannot be empty");
}
}
});
</script>
8.saveChanges事件
用户点击“保存”命令按钮时触发。
参数:
- e.preventDefault:如果调用,将不会调用数据源的同步方法。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" },
{ command: "destroy" }
],
dataSource: {
data:[
{ id: 1, name: "Jane Doe", age: 30},
{ id: 2, name: "John Doe", age: 33}
],
schema: {
model: { id: "id" }
}
},
editable: true,
saveChanges: function(e) {
if (!confirm("Are you sure you want to save all changes?")) {
e.preventDefault();
}
},
toolbar: ["save"]
});
</script>
9.sort事件
用户即将通过排序UI修改dataSource的排序描述符的当前状态时触发。
参数:
- e.sort:所选的排序描述符。
- e.sender:当前实例。
- e.preventDefault:如果调用阻止将更改应用于dataSource。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: { id: "id" }
}
},
sortable: true,
sort: function(e) {
console.log(e.sort);
console.log(e.sort.field);
console.log(e.sort.dir);
}
});
</script>
10.page事件
用户更改当前页面的索引时触发。
参数:
- e.page:所选页面的索引。
- e.sender:当前实例。
- e.preventDefault:调用阻止。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
pageSize: 1,
schema: {
model: { id: "id" }
}
},
pageable: true,
page: function(e) {
console.log(e.page);
}
});
</script>
11.excelExport事件
用户点击excel按钮时触发。
参数:
- e.sender:当前实例。
- e.data:数据项的数组。
- e.workbook:excel配置对象,用于初始化一个kendo.ooxml.Workbook类。工作簿的修改将反应在输出的excel文档中。
- e.proventDefault:如果调用,将不会保存生成的文件。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
toolbar: ["excel"],
columns: [
{ field: "name" }
],
dataSource: [
{ name: "Jane Doe"},
{ name: "John Doe"}
],
excelExport: function(e) {
e.workbook.fileName = "Grid.xlsx";
}
});
</script>
12.pdfExport事件
当用户点击导出到PDF按钮时触发。
参数:
- e.sender:当前实例。
- e.preventDefault:如果调用,将不会保存生成的文件。
- e.promise:在导出完成时触发。
将定期调用以下参数:
- page:当前页面内容。
- pageNumber:当前页码。
- progress:范围为0-1的数字,表示当前导出操作的速度。
- totalPages:总页数
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
toolbar: ["pdf"],
columns: [
{ field: "name" }
],
dataSource: {
data: [{ name: "Jane Doe"},
{ name: "John Doe"},
{ name: "Tim Doe"},
{ name: "Alice Doe"}],
pageSize: 2
},
pdf: {
allPages: true
},
pdfExport: function(e) {
e.promise
.progress(function(e) {
console.log(kendo.format("{0:P} complete", e.progress));
})
.done(function() {
alert("Export completed!");
});
}
});
</script>
13.columnHide事件
用户隐藏某列时触发。
参数:
- e.column:列配置的JavaScript对象。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
columnMenu: true,
columnHide: function(e) {
console.log(e.column);
console.log(e.column.field);
}
});
14.columnLock事件、columnUnlock事件
用户锁定时触发。
- e.column:列配置的JavaScript对象。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id", width: 100, locked: true },
{ field: "name", width: 100 },
{ field: "age", width: 50 }
],
dataSource: [
{ name: "Jane Doe", age: 30, id: 1 },
{ name: "John Doe", age: 33, id: 2 }
],
columnMenu: true,
columnLock: function(e) {
console.log(e.column.field);
},
columnUnlock: function(e) {
console.log(e.column.field);
}
});
</script>
15.columnMenuInit事件
列菜单初始化时触发。
参数:
- e.sender:当前实例。
- e.container:编辑容器元素的JQ对象。
- e.field:列菜单初始化的列的字段。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" },
],
dataSource: [
{ name: "Jane Doe", age: 30},
{ name: "John Doe", age: 33}
],
columnMenu: true,
columnMenuInit: function(e) {
var menu = e.container.find(".k-menu").data("kendoMenu");
console.log('menu',menu);
var field = e.field;
console.log('field',field);
menu.append({ text: "Custom" });
menu.bind("select", function(e) {
console.log($(e.item).text());
if ($(e.item).text() == "Custom") {
console.log("Custom button for", field);
}
});
}
});
</script>
16.columnMenuOpen事件
列菜单打开后,动画完成后触发。
参数:
- e.sender:当前实例。
- e.container:编辑容器元素的JQ对象。
- e.field:列菜单初始化的列的字段。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id" },
{ field: "name" },
{ field: "phone" }
],
dataSource: [
{ name: "Jane Doe", id: 1, phone: "88443558741" },
{ name: "John Doe", id: 2, phone: "88443558751" }
],
filterable: true,
columnMenu: true,
columnMenuOpen: function(e) {
var menu = e.container.children().data("kendoMenu");
menu.open(menu.element.find("li:first"));
},
});
</script>
17.columnReorder事件
用户更改列的顺序时触发。
参数:
- e.sender:当前实例。
- e.column:列配置的JavaScript对象。
- e.newIndex:新的列索引值。
- e.oldIndex:上一次的列索引值。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
reorderable: true,
columnReorder: function(e) {
console.log(e.column.field, e.newIndex, e.oldIndex);
}
});
</script>
18.columnResize事件
用户调整列大小时触发。
参数:
- e.sender:当前实例。
- e.column:列配置的JavaScript对象。
- e.newWidth:新的列宽。
- e.oldWidth:上一次的列宽。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
resizable: true,
columnResize: function(e) {
console.log(e.column.field, e.newWidth, e.oldWidth);
}
});
</script>
19.columnShow事件
用户展示一列时触发。
参数:
- e.column:列配置的JavaScript对象。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
columnMenu: true,
columnShow: function(e) {
console.log(e.column.field);
}
});
</script>
20.dataBinding事件
在绑定其数据源之前触发。
参数:
- e.sender:当前实例。
- e.preventDefault:如果调用阻止数据绑定操作,表格行将保持不变,dataBound事件不会触发。
- e.action:导致dataBinding事件的操作。可能的值:rebind、sync、add、remove。
- e.index:如果添加或删除操作,则可用,显示添加或删除的元素索引。
- e.items:显示将要从DataSource添加、删除的元素的项目数组。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
dataBinding: function(e) {
console.log("dataBinding");
}
});
</script>
<div id="grid"></div>
<script>
function grid_dataBinding(e) {
console.log("dataBinding");
}
$("#grid").kendoGrid({
autoBind: false,
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
]
});
var grid = $("#grid").data("kendoGrid");
grid.bind("dataBinding", grid_dataBinding);
grid.dataSource.fetch();
</script>
21.dataBound事件
绑定到其数据源中的数据时触发。
参数:
- e.sender:当前实例(this)
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
dataBound: function(e) {
console.log("dataBound");
}
});
</script>
22.detailCollapse事件、detailExpand事件
用户折叠、打开表格行时触发。
参数:
- e.detailRow:详细表格行的JQ对象。
- e.masterRow:主表行的JQ对象。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: [
{ name: "Jane Doe", age: 30 },
{ name: "John Doe", age: 33 }
],
detailTemplate: "<div>Name: #: name #</div><div>Age: #: age #</div>",
detailCollapse: function(e) {
console.log(e.masterRow, e.detailRow);
},
detailExpand: function(e) {
console.log(e.masterRow, e.detailRow);
}
});
</script>
23.detailInt事件
在详细表格行初始化时触发。
参数:
- e.data:主表行被绑定的数据项。
- e.datailCell:细节表单元格的JQ对象。
- e.detailRow:详细表格行的JQ对象。
- e.masterRow:主表行的JQ对象。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" }
],
dataSource: [
{
name: "Beverages",
products: [
{ name: "Tea" },
{ name: "Coffee" }
]
},
{
name: "Food",
products: [
{ name: "Ham" },
{ name: "Bread" }
]
}
],
detailTemplate: 'Products: <div class="grid"></div>',
detailInit: function(e) {
e.detailRow.find(".grid").kendoGrid({
dataSource: e.data.products
});
}
});
</script>
24.filter事件
用户通过过滤器过滤数据时触发。
参数:
- e.filter:所选的过滤器的描述符。如果为Null,则过滤器已被清除。
- e.field:过滤器的构建领域。
- e.preventDefault:调用阻止将过滤器描述符添加到数据源。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: { id: "id" }
}
},
filterable: true,
filter: function(e) {
if (e.filter == null) {
console.log("filter has been cleared");
} else {
console.log(e.filter.logic);
console.log(e.filter.filters[0].field);
console.log(e.filter.filters[0].operator);
console.log(e.filter.filters[0].value);
}
}
});
</script>
25.filterMenuInit事件
过滤菜单初始化的时候,第一次打开的时候触发。
参数:
- e.container:过滤菜单表单元素的JQ对象。
- e.field:过滤菜单初始化的字段。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" }
],
dataSource: [
{ name: "Jane Doe"},
{ name: "John Doe"}
],
filterable: true,
filterMenuInit: function(e) {
if (e.field == "name") {
var firstValueDropDown = e.container.find("select:eq(0)").data("kendoDropDownList");
firstValueDropDown.value("contains");
firstValueDropDown.trigger("change");
var logicDropDown = e.container.find("select:eq(1)").data("kendoDropDownList");
logicDropDown.value("or");
logicDropDown.trigger("change");
var secondValueDropDown = e.container.find("select:eq(2)").data("kendoDropDownList");
secondValueDropDown.value("contains");
secondValueDropDown.trigger("change");
}
}
});
</script>
26.filterMenuOpen事件
过滤菜单打开后,在动画完成后触发。
参数:
- e.container:过滤菜单表单元素的JQ对象。
- e.field:过滤菜单初始化列的字段。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" }
],
dataSource: [
{ name: "Jane Doe"},
{ name: "John Doe"}
],
filterable: true,
filterMenuOpen: function(e) {
if (e.field == "name") {
e.container.find(".k-textbox:last").focus();
}
},
});
</script>
27.group事件
当用户即将分组数据源或通过表格修改组描述符状态时触发。
参数:
- e.groups:选定的组描述符。
- e.preventDefault:调用阻止将组描述符更改应用于DataSource和组面板UI。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: { id: "id" }
}
},
groupable: true,
group: function(e) {
if (e.groups.length) {
console.log(e.groups[0].field);
console.log(e.groups[0].dir);
}
}
});
</script>
28.groupCollapse事件、groupExpand事件
用户折叠、打开组行时触发。
参数:
- e.element:表示组行的JQ对象。
- e.group:与组行对应的组对象。
- e.preventDefault:调用防止崩溃。
- e.sender:当前实例。
- <div id="grid"></div> <script> $("#grid").kendoGrid({ columns: [ { field: "name" }, { field: "age" } ], groupable: true, dataSource: [ { name: "Jane Doe", age: 30 }, { name: "John Doe", age: 33 } ], groupCollapse: function(e) { console.log(e.element, e.group); }, groupExpand: function(e) { console.log(e.element, e.group); } }); </script>
29.navigate事件
当启用导航并且用户通过鼠标或键盘交互更改当前项目时触发。
参数:
- e.element:显示高亮单元格的JQ对象。
- e.sender:当前实例。
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id", width: 100, locked: true },
{ field: "name", width: 100 },
{ field: "age", width: 50 }
],
dataSource: [
{ name: "Jane Doe", age: 30, id: 1 },
{ name: "John Doe", age: 33, id: 2 }
],
navigatable: true,
navigate: function(e) {
console.log(e.element); // displays the newly highlighted cell
}
});
</script>