如何切换 Kendo UI PanelBar 上可以展开或折叠的复选框?
How do you toggle a checkbox on a Kendo UI PanelBar that can expand or collapse?
我正在尝试制作一个面板栏,其中包含几个可扩展选项,每个级别都有复选框。我 运行 遇到的问题是,如果您单击属于可扩展面板一部分的复选框,则该复选框不会切换。下面是一个显示问题的简化示例。在下面的示例中,无法切换 Main 1
的复选框
const panelBarTemplate = `
<span class='k-state-default'>
<span>#: item.text #</span>
<input type='checkbox'
id=#: item.id #
class='k-checkbox'
# if (item.isVisible) { #checked='checked'# } # />
# var ItemCheckboxLabelClass = "k-checkbox-label" #
# if (item.items) { ItemCheckboxLabelClass = "k-checkbox-label expandable-item" } #
<label class="#: ItemCheckboxLabelClass #" for=#: item.id # />
</span>
`;
var canExpandCollapse = true;
$('#side-bar-panel').kendoPanelBar({
template: panelBarTemplate,
dataSource: [{
text: 'Main 1',
id: 'Main1',
isVisible: true,
expanded: true,
items: [{
text: 'Sub 1',
id: 'Sub1',
isVisible: true
}, {
text: 'Sub 2',
id: 'Sub2',
isVisible: false
}]
}],
dataBound: function() {
$('.expandable-item').click(function() {
canExpandCollapse = false;
});
},
expand: cancelExpandCollapse,
collapse: cancelExpandCollapse
});
function cancelExpandCollapse(e) {
if (!canExpandCollapse) {
e.preventDefault();
canExpandCollapse = true;
}
}
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.common.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.min.css" rel="stylesheet" />
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/kendo.all.min.js"></script>
<ul id="side-bar-panel">
</ul>
我找到了一个解决方案,可以防止在单击此处的复选框时展开和折叠 ,但是即使禁用了展开和折叠,复选框仍然没有被切换。
我通过不使用复选框找到了解决方法。我没有使用复选框,而是使用了 Kendo 移动开关,并且能够让开关切换并且面板栏不会展开或折叠。
下面是修改后的片段。更改的项目是 panelBarTemplate
、dataBound
配置中的功能,以及添加了 Kendo 移动设备的 css 文件。
const panelBarTemplate = `
<div>
<span>#: item.text #</span>
<input type='checkbox'
id=#: item.id #
# var ItemCheckboxClass = "my-checkbox" #
# if (item.items) { ItemCheckboxClass = "my-checkbox expandable-item" } #
class="#= ItemCheckboxClass #"
# if (item.isVisible) { #checked='checked'# } # />
</div>
`;
var canExpandCollapse = true;
$('#side-bar-panel').kendoPanelBar({
template: panelBarTemplate,
dataSource: [{
text: 'Main 1',
id: 'Main1',
isVisible: true,
expanded: true,
items: [{
text: 'Sub 1',
id: 'Sub1',
isVisible: true
}, {
text: 'Sub 2',
id: 'Sub2',
isVisible: false
}]
}],
dataBound: function() {
//initialize mobile switch if not already initialized.
$('.my-checkbox').each(function(index, item) {
let mobileSwitch = $(item);
let mobileSwitchData = mobileSwitch.data('kendoMobileSwitch');
if (!mobileSwitchData) {
mobileSwitch.kendoMobileSwitch();
}
});
//disable expanding and collapsing when clicking on a mobile switch
//that is attached to an expandable panel.
$('.expandable-item').siblings('.k-switch-container').click(function() {
canExpandCollapse = false;
});
},
expand: cancelExpandCollapse,
collapse: cancelExpandCollapse
});
function cancelExpandCollapse(e) {
if (!canExpandCollapse) {
e.preventDefault();
canExpandCollapse = true;
}
}
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.common.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.mobile.all.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.mobile.min.css" rel="stylesheet" />
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/kendo.all.min.js"></script>
<ul id="side-bar-panel">
</ul>
我正在尝试制作一个面板栏,其中包含几个可扩展选项,每个级别都有复选框。我 运行 遇到的问题是,如果您单击属于可扩展面板一部分的复选框,则该复选框不会切换。下面是一个显示问题的简化示例。在下面的示例中,无法切换 Main 1
的复选框const panelBarTemplate = `
<span class='k-state-default'>
<span>#: item.text #</span>
<input type='checkbox'
id=#: item.id #
class='k-checkbox'
# if (item.isVisible) { #checked='checked'# } # />
# var ItemCheckboxLabelClass = "k-checkbox-label" #
# if (item.items) { ItemCheckboxLabelClass = "k-checkbox-label expandable-item" } #
<label class="#: ItemCheckboxLabelClass #" for=#: item.id # />
</span>
`;
var canExpandCollapse = true;
$('#side-bar-panel').kendoPanelBar({
template: panelBarTemplate,
dataSource: [{
text: 'Main 1',
id: 'Main1',
isVisible: true,
expanded: true,
items: [{
text: 'Sub 1',
id: 'Sub1',
isVisible: true
}, {
text: 'Sub 2',
id: 'Sub2',
isVisible: false
}]
}],
dataBound: function() {
$('.expandable-item').click(function() {
canExpandCollapse = false;
});
},
expand: cancelExpandCollapse,
collapse: cancelExpandCollapse
});
function cancelExpandCollapse(e) {
if (!canExpandCollapse) {
e.preventDefault();
canExpandCollapse = true;
}
}
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.common.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.min.css" rel="stylesheet" />
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/kendo.all.min.js"></script>
<ul id="side-bar-panel">
</ul>
我找到了一个解决方案,可以防止在单击此处的复选框时展开和折叠
我通过不使用复选框找到了解决方法。我没有使用复选框,而是使用了 Kendo 移动开关,并且能够让开关切换并且面板栏不会展开或折叠。
下面是修改后的片段。更改的项目是 panelBarTemplate
、dataBound
配置中的功能,以及添加了 Kendo 移动设备的 css 文件。
const panelBarTemplate = `
<div>
<span>#: item.text #</span>
<input type='checkbox'
id=#: item.id #
# var ItemCheckboxClass = "my-checkbox" #
# if (item.items) { ItemCheckboxClass = "my-checkbox expandable-item" } #
class="#= ItemCheckboxClass #"
# if (item.isVisible) { #checked='checked'# } # />
</div>
`;
var canExpandCollapse = true;
$('#side-bar-panel').kendoPanelBar({
template: panelBarTemplate,
dataSource: [{
text: 'Main 1',
id: 'Main1',
isVisible: true,
expanded: true,
items: [{
text: 'Sub 1',
id: 'Sub1',
isVisible: true
}, {
text: 'Sub 2',
id: 'Sub2',
isVisible: false
}]
}],
dataBound: function() {
//initialize mobile switch if not already initialized.
$('.my-checkbox').each(function(index, item) {
let mobileSwitch = $(item);
let mobileSwitchData = mobileSwitch.data('kendoMobileSwitch');
if (!mobileSwitchData) {
mobileSwitch.kendoMobileSwitch();
}
});
//disable expanding and collapsing when clicking on a mobile switch
//that is attached to an expandable panel.
$('.expandable-item').siblings('.k-switch-container').click(function() {
canExpandCollapse = false;
});
},
expand: cancelExpandCollapse,
collapse: cancelExpandCollapse
});
function cancelExpandCollapse(e) {
if (!canExpandCollapse) {
e.preventDefault();
canExpandCollapse = true;
}
}
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.common.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.mobile.all.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2017.2.621/styles/kendo.flat.mobile.min.css" rel="stylesheet" />
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2017.2.621/js/kendo.all.min.js"></script>
<ul id="side-bar-panel">
</ul>