【发布时间】:2015-07-06 23:01:54
【问题描述】:
似乎很少有div 被隐藏并通过复选框显示的例子,但我一直在努力找到一个以与我尝试相同的方式解决它的例子。
我正在努力做的是创建一种“简单”的方法来显示特定的 div触发
这是代码的sn-p:
$(document).ready(function () {
$("input[type=checkbox]").change(function () {
var divId = $(this).attr("id");
if ($("#expensive").is(":checked") && $(this).is(":checked") || $("#cheap").is(":checked") && $(this).is(":checked")) {
$("." + divId).show();
} else {
$("." + divId).hide();
};
在我在 JSFiddle 中添加的示例中,我将复选框分为两个主要类别,即 color(由:red、green、blue 和 紫色)和价格(由:“昂贵 和 便宜)
我的想法是我可能希望查看所有具有“红色”类别的物品,无论是便宜的还是昂贵的。或者,我可能希望查看部分或所有颜色,但只查看便宜的颜色。
我试图将代码减少到相当少的数量,但是有一个序列似乎使逻辑跳闸,对于我的一生,我想不出如何让它在这种情况下工作,或者我可能错过了什么。
example is located on JSFiddle 这里供人们测试:
除非你这样做:
如果重复这个顺序:
1. 关闭便宜或昂贵
2. 关闭其中一种颜色
3.现在打开相同的颜色
结果是您再次点击的颜色会同时显示便宜和昂贵,即使其中一个复选框已关闭。
所有其他组合似乎都有效,我希望所写的方法是最简单的方法,但显然缺少一些东西,我不明白为什么它没有给我想要的结果。因此,如果有人对我错过的内容有任何想法,那么我肯定会感谢您的帮助。
在等待的同时,我又尝试了一次,并将显示隐藏扩展为简单直接的块……我所做的是首先显示所有内容,然后如果每个 div 受到相关复选框的影响,则隐藏它。
$(document).ready(function() {
$("input[type=checkbox]").change(function() {
var divId = $(this).attr("id");
$("." + divId).show();
if (!$("#expensive").is(":checked")){
$(".expensive").hide();
};
if (!$("#cheap").is(":checked")){
$(".cheap").hide();
};
if (!$("#cheap").is(":checked")){
$(".cheap").hide();
};
if (!$("#red").is(":checked")){
$(".red").hide();
};
if (!$("#blue").is(":checked")){
$(".blue").hide();
};
if (!$("#purple").is(":checked")){
$(".purple").hide();
};
if (!$("#green").is(":checked")){
$(".green").hide();
};
});
});
这是一个有点冗长的方法,但它似乎有效.. 虽然已经发布的答案看起来都好得多。 非常感谢所有通过发布 sn-ps 和建议做出回应的人
亲切的问候
【问题讨论】:
-
这似乎与我写了answer 的这个问题有关。也许它是有帮助的。作为旁注,您不需要链接到 JSFiddle,您也可以在此处添加代码片段。
标签: javascript jquery html checkbox input-filtering