问题描述
这是我的代码,因此您已经可以猜出我的问题:
const solutionChecks = $('#solution-checks :checkBox');
const searchFire = $('.search h6');
const solutionForm = $('#solution-checks');
solutionChecks.click(function() {
$("div[data-category]").hide();
var showAll;
if (solutionChecks.is(":checked")) {
var showAll = true;
} else {
var showAll = false;
}
solutionChecks.find("input").add(':checked').each(function() {
if (solutionChecks.find("input").add(':checked').length == null) {
$("div[data-category]").show();
}
$("div[data-category*=" + $(this).val() +"]").show();
});
});
searchFire.click(function() {
$(this).next('.absolute').toggleClass('show');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="container-md search">
<div class="row">
<div class="col-md-4">
<h6>Selection</h6>
<div class="absolute">
<form id="solution-checks">
<label>
<input type="checkBox" name="Businesses" value="Businesses" id="Businesses"> Businesses
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkBox" name="Accountancy" value="Accountancy" id="Accountancy"> Accountancy
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkBox" name="Banks" value="Banks" id="Banks"> Banks
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkBox" name="Partners" value="Partners" id="Partners"> Partners
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkBox" name="Developers" value="Developers" id="Developers"> Developers
<span class="checkmark"></span>
</label>
<br>
</form>
</div>
</div>
</div>
</div>
<div class="container-md px-0 solutions">
<div class="row">
<div class="col-md-4" data-category="Accountancy">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Partners">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Accountancy">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
</div>
</div>
因此,问题很容易:我正在基于复选框构建搜索过滤器。
如果您根据选择检查一个或多个输入,则未选择选择器的框将消失,但一个或多个选择器将保留在那里。
我正在使用jquery和一个click事件来触发系统。但是问题是,如果您不选择任何选项,将会发生什么。本质上,由于您将在触发事件(单击)后立即隐藏所有内容,因此所有框都将保持隐藏状态。在我的代码中,我创建了一个if语句,希望能够捕捉到真假状态,但不幸的是,它没有用。之所以不起作用,是因为以下原因:在遍历所有元素之前,我可以捕获状态(输入的真/假),但是在此之后,我将只能捕获状态。真实的陈述。
之所以这样说,是因为我试图在每个函数中创建一个if语句来捕获选中的选择器的长度:
if (solutionChecks.find("input").add(':checked')).length == 0){}
之所以不起作用,是因为就像我说的那样,由于某种原因,在每个语句中,我的变量showAll不起作用。我试图将变量放入每个语句内,但它也不起作用,仅在每个语句外起作用。
我的问题是:如何获取点击状态?
谢谢
解决方法
您可以添加简单的检查以查看是否未选择类别。如果不 选择了类别,显示所有
div
的
// check if no categories are selected
if ($('#solution-checks :checkbox:checked').length == 0) {
// show all categories
$("div[data-category]").show();
}
这是您的代码段的更新版本,其中添加了支票
const solutionChecks = $('#solution-checks :checkbox');
const searchFire = $('.search h6');
const solutionForm = $('#solution-checks');
solutionChecks.click(function() {
$("div[data-category]").hide();
// check if no categories are selected
if ($('#solution-checks :checkbox:checked').length == 0) {
// show all categories
$("div[data-category]").show();
return;
}
solutionChecks.find("input").add(':checked').each(function() {
if (solutionChecks.find("input").add(':checked').length == null) {
$("div[data-category]").show();
}
$("div[data-category*=" + $(this).val() +"]").show();
});
});
searchFire.click(function() {
$(this).next('.absolute').toggleClass('show');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="container-md search">
<div class="row">
<div class="col-md-4">
<h6>Selection</h6>
<div class="absolute">
<form id="solution-checks">
<label>
<input type="checkbox" name="Businesses" value="Businesses" id="Businesses"> Businesses
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Accountancy" value="Accountancy" id="Accountancy"> Accountancy
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Banks" value="Banks" id="Banks"> Banks
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Partners" value="Partners" id="Partners"> Partners
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Developers" value="Developers" id="Developers"> Developers
<span class="checkmark"></span>
</label>
<br>
</form>
</div>
</div>
</div>
</div>
<div class="container-md px-0 solutions">
<div class="row">
<div class="col-md-4" data-category="Accountancy">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Partners">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Accountancy">
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
</div>
</div>
,
看看这个。你太努力了
const $solutionChecks = $('#solution-checks :checkbox');
const $searchFire = $('.search h6');
const $solutionForm = $('#solution-checks');
$solutionChecks.on("click",function() {
const $checked = $solutionForm.find(":checked"); // not solutionChecks
if ($checked.length === 0) { // nothing checked
$("div[data-category]").show(); // show all
return; // stop looking further
}
$("div[data-category]").hide(); // hide all
$checked.each(function() {
const val = $(this).val();
$(`div[data-category^=${val}]`).show(); // show only checked
});
});
// not part of the problem
$searchFire.on("click",function() {
$(this).next('.absolute').toggleClass('show');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="container-md search">
<div class="row">
<div class="col-md-4">
<h6>Selection</h6>
<div class="absolute">
<form id="solution-checks">
<label>
<input type="checkbox" name="Businesses" value="Businesses" id="Businesses"> Businesses
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Accountancy" value="Accountancy" id="Accountancy"> Accountancy
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Banks" value="Banks" id="Banks"> Banks
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Partners" value="Partners" id="Partners"> Partners
<span class="checkmark"></span>
</label>
<br>
<label>
<input type="checkbox" name="Developers" value="Developers" id="Developers"> Developers
<span class="checkmark"></span>
</label>
<br>
</form>
</div>
</div>
</div>
</div>
<div class="container-md px-0 solutions">
<div class="row">
<div class="col-md-4" data-category="Accountancy">Accountancy
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Partners">Partners
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
<div class="col-md-4" data-category="Accountancy">More Accountancy
<div class="h-100">
<h3>Something</h3>
<p>Lorem ipsum dolor sit amet,consectetur adipiscing elit. Vivamus cursus scelerisque erat. </p>
<a href="#" class="btn-secondary">Learn more</a>
</div>
</div>
</div>
</div>