Для Kendo Jquery Grid у меня есть столбец со значениями, разделенными запятыми, и для этого столбца мне нужен фильтр-флажок, он отображается в пользовательском интерфейсе, но не работает.Даже событие filterMenuOpen не вызывается.
Это Kendo Jquery Grid, и мы используем проверку и фильтрацию на стороне клиента.
var grid = $("#grid").kendoGrid({
dataSource: dataSource,
filterable: true,
filterMenuOpen: function (e) {
debugger
if (e.sender.dataSource.filter()) {
e.sender.dataSource.filter().filters.forEach(function (f) {
if (f.field == "Source") {
var checkbox = e.container.find("input[value='" + f.value + "']");
if (!checkbox[0].checked) {
e.container.find("input[value='" + f.value + "']").click()
}
}
})
}
},
columns: [
{ field: 'placeuserId', hidden: true },
{ field: 'userLastName', title: 'Last Name', width: '125px', editor: userLastNameEditor },
{ field: 'userFirstName', title: 'First Name', width: '125px', editor: userFirstNameEditor },
{ field: 'userEmail', title: 'Email', width: '125px', editor: userEmailReadOnlyEditor },
{
field: 'allowPrimaryplaceOnlyProviders',
title: 'Restrict to Primary place',
width: '125px',
template: '#if (allowPrimaryplaceOnlyProviders) {# <span>Yes</span> # } else {# <span>No</span> #}#',
editor: allowPrimaryplaceOnlyProvidersEditor,
filterable: {
extra: false,
operators: {
number: {
eq: "is equal to"
}
}
}
},
{
field: 'source',
title: 'Source',
width: '125px',
template: '#= getplaceusers(source, userplaceGroups) #',
editor: sourceReadOnlyEditor,
filterable: {
multi: true,
dataSource: [{
source: "Direct",
}, {
source: "Tacoma",
}, {
source: "Kirkland",
}]
},
},
{
command: [
{ name: "edit", text: { update: "Save" } },
{
name: "Delete",
click: function (e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
var message = "Are you sure you want to remove this user for this place?";
var dialog = company.Web.utility.displayConfirmationDialog(message, function (e) {
grid.dataSource.remove(dataItem);
grid.dataSource.sync();
$(dialog).dialog("close");
}, { title: "Confirm Deletion" });
}
}],
hidden: isrole === 'False',
title: 'Action', width: '150px'
}
],
scrollable: false,
filterable: company.Web.config.grid.filterable,
sortable: company.Web.config.grid.sortable,
pageable: company.Web.config.grid.pageable,
dataBound: function (e) {
debugger
var sourceFilters = $('#grid').data('kendoGrid').dataSource._filter ?
$('#grid').data('kendoGrid').dataSource._filter.filters.filter(x => x.field == "Source").map(x => x.value) : [];
if (sourceFilters.length > 0) {
sourceFilters.forEach(function (item) {
debugger
if (item === "Direct") {
$('#grid').data('kendoGrid').dataSource.filter({
field: "userplaceGroups",
operator: "eq",
value: ""
});
}
else {
$('#grid').data('kendoGrid').dataSource.filter({
field: "userplaceGroups",
operator: "contains",
value: item
});
}
});
}
//Selects all delete buttons
$("#grid tbody tr .k-grid-Delete").each(function () {
var currentDataItem = $("#grid").data("kendoGrid").dataItem($(this).closest("tr"));
debugger
//Check in the current dataItem if the row is deletable
if (currentDataItem.source == '1') {
$(this).remove();
}
})
},
editable: 'inline',
edit: function (e) {
if (!e.model.isNew()) {
selecteduser = { userId: e.model.userId };
}
var myValidator = e.sender.editable.validatable;
e.container.find('.k-grid-update').click(function (e) {
var validationErrors = myValidator._errors;
var isInvalid = !myValidator.validate();
if (!selecteduser.userId) {
$.extend(validationErrors, { 'user': 'user is required.' });
isInvalid = true;
}
if (isInvalid) {
company.Web.utility.showErrors(validationErrors, $('#validationErrors'));
e.stopPropagation();
e.preventDefault();
} else {
$("#validationErrors").empty();
}
});
},
cancel: function (e) {
$("#validationErrors").empty();
}
}).data('kendoGrid');
Ниже приведен исходный код.Пожалуйста, помогите и предложите.