我最近遇到了一個問題,處理Telerik Treeview component和處理遞歸選擇與處理更大的數據集(500-1000 +節點)時用複選框。最初Treeview |中的遞歸複選框選擇Telerik MVC
- 所有節點被選擇:
隨着較小的數據集(100-300節點)的樹形目錄和它的選擇方法的工作如下(它們應該)。
單擊父節點切換所有子節點的選擇。
- 取消選擇單個子節點將取消選擇父(和任何祖父母/頂級節點)
大多數的這些東西我相信,隨着樹視圖和選擇打交道時是相當普遍的。當前使用的方法不是最乾淨的,並且在選擇過程中調用了不必要的額外事件。
我只是好奇,如果任何人有處理類似的問題之前,我開始撕裂當前的代碼(可用下面)。
現有選擇代碼:
$('#TreeView').find("li").find('> div > .t-checkbox :checkbox').bind('click', function (e) {
var isChecked = $(e.target).is(':checked');
var treeView = $($(e.target).closest('.t-treeview')).data('tTreeView');
var item = $(e.target).closest('.t-item');
var checkboxes = item.find('.t-checkbox :checkbox');
$.each(checkboxes, function (index, checkbox) { $(checkbox).attr('checked', isChecked ? true : false); treeView.checkboxClick(e, checkbox); });
var siblings = item.parent().find('> li .t-checkbox');
var siblingsLength = siblings.length;
var checkedLength = siblings.find(':checked').length;
if (siblingsLength == checkedLength) {
var parentCheckBox = item.parent().closest('.t-item').find('> div .t-checkbox :checkbox');
var grandparentCheckBox = item.parent().parent().parent().closest('.t-item').find('> div .t-checkbox :checkbox');
parentCheckBox.attr('checked', true)
grandparentCheckBox.attr('checked', true)
treeView.checkboxClick(e, parentCheckBox)
treeView.checkboxClick(e, grandparentCheckBox)
}
else {
var parentCheckBox = item.parent().closest('.t-item').find('> div .t-checkbox :checkbox');
var grandparentCheckBox = item.parent().parent().parent().closest('.t-item').find('> div .t-checkbox :checkbox');
parentCheckBox.attr('checked', false)
grandparentCheckBox.attr('checked', false)
treeView.checkboxClick(e, parentCheckBox)
treeView.checkboxClick(e, grandparentCheckBox)
}
});