Javascript 如果未选中子节点,则未选中父节点
如果其中一个子节点未选中,则未选中的父节点上存在问题。但我试图搜索解决方案,但没有一个解决方案对我的代码起作用 我在这里引用嵌套的checkbox函数 下面是我的代码示例:Javascript 如果未选中子节点,则未选中父节点,javascript,jquery,checkbox,Javascript,Jquery,Checkbox,如果其中一个子节点未选中,则未选中的父节点上存在问题。但我试图搜索解决方案,但没有一个解决方案对我的代码起作用 我在这里引用嵌套的checkbox函数 下面是我的代码示例: <ul> <li> <label><input type="checkbox" data-id="All Master" data-name="All Master" id="myCheckBox0" onchange="checkDisabled(testi
<ul>
<li>
<label><input type="checkbox" data-id="All Master" data-name="All Master" id="myCheckBox0" onchange="checkDisabled(testing);"/> All Kedai Kiosk On Master Mode</label>
<ul>
<li>
<label><input type="checkbox" data-id="Terengganu" data-name="Terengganu" id="myCheckBox76" onchange="checkDisabled(testing);"/> Terengganu</label>
<ul id="navlist">
<li><label><input type="checkbox" data-id="Kiosk 63" data-name="Kiosk 63" id="myCheckBox77" onchange="checkDisabled(testing);"/> Kiosk 63</label></li>
<li><label><input type="checkbox" data-id="Kiosk 64" data-name="Kiosk 64" id="myCheckBox78" onchange="checkDisabled(testing);"/> Kiosk 64</label></li>
</ul>
</li>
</ul>
</li>
</ul>
-
主模式下的所有科代信息亭
-
丁加奴
- 63号检查亭
- 64号亭
我想要的是,当我取消检查63号亭时,作为父母的丁加奴也将被取消检查。我也在使用从网站下载的jquery.deepcheckbox.js。为了实现这一目标,我应该改变什么?谢谢
编辑:
我在这里复制javascript代码。为了实现父项取消选中功能,有什么需要更改的吗?谢谢
代码如下:
(function ($) {
var defaults = {
listItemBefore: '<span class="item">',
listItemAfter: '</span>',
listItemsDivider: ', ',
labelExceptBefore: ' (except ',
labelExceptAfter: ')',
labelExceptBetween: ', ',
labelNothingIsSelected: 'Nothing is selected'
},
instances = [];
$.fn.deepcheckbox = function (options) {
if (instances.indexOf(this.selector) < 0) {
var tree = _buildTree(this);
_bindCheckboxes(tree, function (item, value) {
if (item.children) {
_setValueToChildren(item.children, value);
}
});
if (!options) {
options = {};
}
options = $.extend(defaults, options);
if (options.readableListTarget) {
$(options.readableListTarget).html(options.labelNothingIsSelected);
_bindCheckboxes(tree, function () {
var items = [],
except = [],
output = [];
function _dig (branch, level, skipAdding) {
if (!level) {
level = 0;
}
for (var i = 0, len = branch.length; i < len; i++) {
if (branch[i].el.prop('checked')) {
var value = options.listItemBefore.replace('{{id}}', branch[i].el.data('id')) + branch[i].el.data('name'),
exceptCount = 0;
if (branch[i].children) {
for (var j = 0, lenJ = branch[i].children.length; j < lenJ; j++) {
if (!branch[i].children[j].el.prop('checked')) {
except.push(branch[i].children[j].el.data('id'));
if (exceptCount === 0) {
value += options.labelExceptBefore;
}
if (exceptCount > 0) {
value += options.labelExceptBetween;
}
value += branch[i].children[j].el.data('name');
exceptCount++;
}
}
if (exceptCount > 0) {
value += options.labelExceptAfter;
}
}
value += options.listItemAfter;
if (level > 0 && branch[i].el.prop('checked') && !branch[i].parent.prop('checked')) {
skipAdding = false;
}
if (!skipAdding || exceptCount > 0) {
output.push(value);
items.push(branch[i].el.data('id'));
}
}
if (branch[i].children) {
_dig(branch[i].children, level + 1, true);
}
}
return output.join(options.listItemsDivider);
}
var digged = _dig(tree);
$(options.readableListTarget).html((digged.length > 0) ? digged : options.labelNothingIsSelected);
if (options.onChange && typeof options.onChange === 'function') {
options.onChange(items, except);
}
});
}
instances.push(this.selector);
}
};
function _buildTree ($anchor, $parent) {
var output = [],
rootItems = $anchor.find('ul:first > li');
for (var i = 0, len = rootItems.length; i < len; i++) {
var $element = $(rootItems[i]).find('input[type=checkbox]:first'),
id = _guId();
if (!$element.data('id')) {
$element.data('id', id);
}
if (!$element.data('name')) {
$element.data('name', id);
}
var branch = {
el: $element
},
children = _buildTree($(rootItems[i]), $element);
if (children) {
branch.children = children;
}
if ($parent) {
branch.parent = $parent;
}
output.push(branch);
}
return output.length > 0 ? output : false;
}
function _bindCheckboxes (tree, callback) {
for (var i = 0, len = tree.length; i < len; i++) {
(function (item) {
$(item.el).on('change', function () {
callback(item, $(this).prop('checked'));
});
if (item.children) {
_bindCheckboxes(item.children, callback);
}
}(tree[i]));
}
}
function _setValueToChildren (tree, value) {
for (var i = 0, len = tree.length; i < len; i++) {
tree[i].el.prop('checked', value);
if (tree[i].children) {
_setValueToChildren(tree[i].children, value);
}
}
}
function _guId () {
function s4 () {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
})(jQuery);
(函数($){
var默认值={
listItemBefore:“”,
listItemAfter:“”,
listItemsDivider:',',
labelExceptBefore:'(除',
labelExceptAfter:')',
labelExceptBetween:',',
labelNothingIsSelected:“未选择任何内容”
},
实例=[];
$.fn.deepcheckbox=函数(选项){
if(instances.indexOf(this.selector)<0){
var-tree=\u buildTree(this);
_绑定复选框(树、函数(项、值){
if(项目.子项){
_将值设置为子项(item.children,value);
}
});
如果(!选项){
选项={};
}
选项=$.extend(默认值,选项);
if(options.readableListTarget){
$(options.readableListTarget).html(options.labelnothingselected);
_绑定复选框(树、函数(){
var项目=[],
除=[],
输出=[];
功能(分支、级别、填充){
如果(!级别){
级别=0;
}
对于(变量i=0,len=branch.length;i0){
value+=options.labelExceptBetween;
}
value+=branch[i]。children[j]。el.data('name');
exceptCount++;
}
}
如果(例外计数>0){
value+=options.labelExceptAfter;
}
}
value+=options.listItemAfter;
如果(级别>0&&branch[i].el.prop('checked')&&branch[i].parent.prop('checked')){
skippadding=false;
}
如果(!Skippadding | | exceptCount>0){
输出推送(值);
items.push(分支[i].el.data('id');
}
}
if(分支[i].子级){
_挖掘(分支[i]。子级,级别+1,真);
}
}
返回output.join(options.listItemsDivider);
}
var digged=_dig(树);
$(options.readableListTarget).html((digged.length>0)?digged:options.labelnothingselected);
if(options.onChange&&typeof options.onChange=='function'){
选项。onChange(项目除外);
}
});
}
实例.push(this.selector);
}
};
函数_buildTree($anchor,$parent){
var输出=[],
rootItems=$anchor.find('ul:first>li');
for(var i=0,len=rootItems.length;i0?输出:false;
}
函数绑定复选框(树、回调){
for(var i=0,len=tree.length;i
我的测试选择部分:
<div>
<p>Selected items (readable): <span class="selected-readable"></span></p>
<p>Selected items: <span class="selected">[]</span></p>
<p>Excepted items: <span class="excepted">[]</span></p>
</div>
选定项目(可读):
选定项目:[]
例外项目:[]
请试试这个
$('ul:checkbox')。绑定('click',函数(){
var$chk=$(此),$li=
$(document).ready(function(){
$('body').on('click', 'input[type="checkbox"]', function(){
$this = $(this)
var flag = true
$.each($this.closest('ul').find('input'), function(){
if ($(this).prop('checked') == false){
flag = false}
});
if(flag){
$this.closest('ul').closest('li').find('input').first().prop('checked', true);
if ($this.closest('ul').closest('li').closest('ul').closest('li').length > 0){
document.aa = $this.closest('ul').closest('li').closest('ul').closest('li').find('ul input')
$.each( $this.closest('ul').closest('li').closest('ul').closest('li').find('ul input'), function(){
if ($(this).prop('checked') == false){
flag = false}
});
if(flag){$this.closest('ul').closest('li').closest('ul').closest('li').find('input').first().prop('checked', true);}
}}
else{
parents = $this.parents('ul li');
parents.splice(0,1);
for (var i = 0; i < parents.length; i++) {
$this = $(parents[i]);
$this.find('label').first().find('input').prop('checked', false);
};
}
});
});