【问题标题】:Filtering div's based on checkbox value根据复选框值过滤 div
【发布时间】:2013-09-10 22:18:51
【问题描述】:

我不会费心发布我的 jquery,因为我很确定这都是无稽之谈,因为它不会导致任何错误但仍然没有做任何事情......

<h3>Candidate Experience</h3>

<div class="search_box">
<input type="checkbox" name="3year" id="3yearexp" value="1"> 3+ Years <br>
<input type="checkbox" name="5year" id="5yearexp" value="2"> 5+ Years <br>
<input type="checkbox" name="7year" id="7yearexp" value="3"> 7+ Years <br>
<input type="checkbox" name="10year" id="10yearexp" value="4"> 10+ Years <br>
</div>

<h3><br>Candidate Salary</h3>

<div class="search_box">
<input type="checkbox" name="3039" value="s29"> less than £29,999<br>
<input type="checkbox" name="3039" value="s3039"> £30,000 - £39,999 <br>
<input type="checkbox" name="4059" value="s4059"> £40,000 - £59,999 <br>
<input type="checkbox" name="6079" value="s6079"> £60,000 - £79,999 <br>
<input type="checkbox" name="80plus" value="80plus"> £80,000 + <br>
</div>





<div class="talent_result_wrapper" data-experience="10yearexp" data-salary="s6079">
<ul>
<li><strong>Talent ID:  </strong>100007</li>
<li><strong>Resides:  </strong>London</li>
<li><strong>Salary Required:  </strong>£67000</li>
<li><strong>Experience:  </strong>10 Years </li>
<li><strong>Industy:  </strong>24</li>
<li><strong>Specialism:  </strong>24</li>
</ul>
<div>
<br>
<br> 

<div class="talent_result_wrapper" data-experience="5yearexp" data-salary="s3039">
<ul>
<li><strong>Talent ID:  </strong>100006</li>
<li><strong>Resides:      </strong>London</li>
<li><strong>Salary Required:  </strong>£35000</li>
<li><strong>Experience:  </strong>5 Years </li>
<li><strong>Industy:  </strong>24</li>
<li><strong>Specialism:  </strong>15</li>
</ul>
</div>

我正在尝试使用复选框来过滤掉结果。我已经在谷歌上搜索了好几天,但我对 jquery 还是很陌生,所以我真的很挣扎。 基本上,如果我勾选 5 年经验复选框,它应该显示第二个结果,同样,如果我单击 10 年它应该显示第一个结果,或者如果我有两个它应该显示两者。

同样,它需要与工资一起工作,所以如果我选中 30k -39k 框,它应该显示第二个结果,如果我选中 10 年和 30k - 39k 它应该什么都不显示。

这有意义吗?

我为此创建了一个小提琴:http://jsfiddle.net/MCam435/hpej8/

我一直在尝试重新创建类似于这个小提琴的东西,但我所能做的就是隐藏我页面的全部内容! http://jsfiddle.net/mattball/d2v4Q/

有人可以帮忙吗?

【问题讨论】:

    标签: jquery html checkbox filter


    【解决方案1】:

    您应该更改复选框的值

    而不是1, 2, 3, 4

    value="10yearexp" 等那样做,然后我们可以这样做:

    $(".search_box input[type=checkbox]").click( function(e){
        if($(this).val().length == 0){
            $(".talent_result_wrapper").show();
        } else {
            $(".talent_result_wrapper").hide();
            $("div[data-experience='" + $(this).val() + "']").show();
        }
    
    
        //added below shows all when nothing is checked!
        var n = $( "input:checked" ).length;
        if(n === 0){
            $(".talent_result_wrapper").show();
        }
    
    });
    

    如果由我来决定,我会进行很多更改,但无论如何都不是这样,上面的代码是不完整的,并且有更有效的方法来实现您的需求。

    编辑:

    更新了我的答案,它更简洁、更短+它在没有勾选任何内容时显示所有元素

    DEMO

    【讨论】:

    • 谢谢。刚刚尝试过,它与我的操作方式相似,但是它过滤掉了两个结果。这是我之前遇到的同样的问题,当我取消勾选时它不会再次显示所有内容。 (更新了小提琴)。
    • Pst @Mcam435 检查我的更新,只要您将值更改为 data-experience +,它就适用于所有元素,如果全部取消勾选,它将再次显示所有内容。
    • 谢谢,可以了。不会取消隐藏所有内容,但它比我拥有的任何东西都更接近!为了让这个工作也能在薪水上发挥作用,最好将代码添加为一个全新的代码块,还是将其放入此代码中? P.S,好听的名字+头像:)
    • 是的,你可以把它变成一个全新的代码块,你甚至可以把它变成一个简单的功能,点击所有复选框,但如果由我决定,我会做很多改变代码使其更加简单。但至少这会让你知道该怎么做 P.S,我知道吗? ;D 顺便说一句,如果有帮助,请检查一下!干杯!
    • @Mcam435 检查更新的演示或代码块我添加了几行,当没有勾选任何内容时,一切都会显示
    【解决方案2】:

    看看这个code。它没有完全完成。但是你会知道如何去做。

    $('input[data-exp], input[data-sal]').on('click', function(){
        if(this.checked)
        {
            var exp = $(this).attr('data-exp');
            var sal = $(this).attr('data-sal');
            alert(exp + sal);
            $('.talent_result_wrapper').each(function(){
                if($(this).attr('data-experience') == exp || $(this).attr('data-salary') == sal)
                {
                    $(this).show();
                }
                else
                {
                    $(this).hide();
                }
            });
        }
    });
    

    【讨论】:

    • 请注意,我已将属性 data-exp 和 data-sal 添加到输入元素,因为我没有看到您的风格一致。您已使用 id 和 name 元素来保存经验输入中的值以及薪水输入中的 name 和 value 元素。我只是为了方便而更改它们。你仍然可以和他们一起做。
    • 我在小提琴上收到一个错误,说未定义?抱歉,是的,我知道输入有点乱。这是对原型的绝望尝试!
    • 是的,你一定会得到 1 个未定义的值。如果理解代码,您将看到我正在使用 || 在单击处理程序中检查薪水和经验。健康)状况。当您单击输入时,它将是薪水过滤器或经验过滤器。所以你可以放心地忽略另一个。我将警报框留在小提琴中只是为了向您展示。希望这会有所帮助。
    • 就像我说的那样,我没有在逻辑上做太多工作。只是想会告诉你如何在 jquery 中完成。因此,如果您干预 if 条件,您将在某个时候得到正确的结果。
    • 好吧,对不起,我明白了。我不确定我是否遗漏了一些明显的东西,但是第二个结果(10006)似乎根本没有出现在任何复选框上?
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多