gpt4 book ai didi

javascript - 下拉复选框和未选中的父元素?

转载 作者:行者123 更新时间:2023-11-28 06:13:52 31 4
gpt4 key购买 nike

我热衷于 jquery,这就是我尝试在其上发展自己的原因。

我有一些问题需要解决,但我知道我的大脑停止运转了,因为我为真正的工作付出了很多。

demo

你看到的链接是我自己开发的元素。但我不能做的最后一件事是如何切换下拉我的复选框,它有子 ul 元素。我的意思是我想下拉我的嵌套复选框

如果我单击父元素,则必须检查并打开子元素(到目前为止没问题),但不必检查父元素。我的意思是如果有子元素,我不想检查父元素。

我的代码

html

<html lang="en">
<head>
<meta charset="UTF-8">
<title>No Title</title>
</head>
<body>

<div class="new-checkbox">
<ul>
<li>
<input type="checkbox" id="input1">
<label for="input1">kategori <strong>(1)</strong>
</label>
<ul>
<li>
<input type="checkbox" id="input11">
<label for="input11">kategori<strong>(11)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input12">
<label for="input12">kategori <strong>(12)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input13">
<label for="input13">kategori <strong>(13)</strong>
</label>
</li>
</ul>
</li>
<li>
<input type="checkbox" id="input2">
<label for="input2">kategori <strong>(2)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input3">
<label for="input3">kategori <strong>(3)</strong>
</label>
<ul>
<li>
<input type="checkbox" id="input31">
<label for="input31">kategori <strong>(31)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input32">
<label for="input32">kategori <strong>(32)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input33">
<label for="input33">kategori <strong>(33)</strong>
</label>
<ul>
<li>
<input type="checkbox" id="input331">
<label for="input331">kategori <strong>(331)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input332">
<label for="input332">kategori <strong>(332)</strong>
</label>
</li>
<li>
<input type="checkbox" id="input333">
<label for="input333">kategori <strong>(333)</strong>
</label>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div><!-- new checkbox-->

<script type="text/javascript" src="https://cdn.anitur.com.tr/js/jquery-1.8.2.min.js" ></script>

</body>
</html>

CSS

.new-checkbox ul {
padding: 0;
margin: 0;
list-style: none;
margin-left: 30px;
font: normal 11px/16px"Segoe UI", Arial, Sans-serif;
}

.new-checkbox ul:first-child {
margin-left: 0;
}

.new-checkbox ul li {
margin: 3px 0;
}

.new-checkbox input[type="checkbox"] {
display: none;
}

.new-checkbox label {
cursor: pointer;
}

.new-checkbox input[type="checkbox"] + label:before {
border: 1px solid #ffffff;
content: "\00a0";
display: inline-block;
font: 16px/1em sans-serif;
height: 13px;
width: 13px;
margin: 2px .25em 0 0;
padding: 0;
vertical-align: top;
border: solid 1px #1375b3;
color: #1375b3;
opacity: .50;
}

.new-checkbox input[type="checkbox"]:checked + label:before {
background: #fff;
color: #1375b3;
content: "\2714";
text-align: center;
box-shadow: 0 0 2px rgba(0, 0, 0, .25) inset;
opacity: 1;
}

.new-checkbox input[type="checkbox"]:checked + label:after {
font-weight: bold;
}

.new-checkbox ul li:before {
content: "\25b6";
display: inline-block;
margin: 2px 0 0;
width: 13px;
height: 13px;
vertical-align: top;
text-align: center;
color: #e74c3c;
font-size: 8px;
line-height: 13px;
cursor: pointer;
}


.new-checkbox li {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}

.new-checkbox input[type="checkbox"][id]:checked ~ li::before {
content: "\25bc";
}

.new-checkbox li ul {
display: none;
}

.new-checkbox li.has-checked > ul {
display: block;
}
.addDownicon li::before {
content: "\25bc" !important;
}

j查询

$(document).ready(function() {
$('.new-checkbox input[type=checkbox]').on("change", function() {
var checked = this.checked,
$li = $(this).parent();
$li.find('input[type=checkbox]').prop('checked', checked).parent().toggleClass('has-checked', checked);

$li.parentsUntil('.new-checkbox', 'li').each(function() {
var $checks = $(this).find('ul input[type=checkbox]');
$(this).children('input[type=checkbox]').prop('checked', !$checks.filter(':not(:checked)').length);

$(this).toggleClass('has-checked', $checks.is(':checked'));
});

});


});

最佳答案

我必须承认我仍然不是 100% 确定我理解了 - 可能是因为我不是以英语为母语的人并且很难阅读复杂的问题,但我尝试了:

您可以添加一个函数来查找 child 并设置一个类 has-children如果有 child :

$('.new-checkbox ul')
.find("input[type=checkbox]")
.parent()
.each(function(i, elem) {
if ($(elem).find("ul").length > 0) {
$(this).addClass('has-children');
}
});

然后添加一个 CSS 规则,去掉那些 <input> 上的人为复选框。父级标签 <li>有课has-children设置:

.new-checkbox .has-children > input[type="checkbox"]:checked + label:before {
content: " ";
}

我创建了 an updated JSBin demo显示结果。

关于javascript - 下拉复选框和未选中的父元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997333/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com