【问题标题】:Show / Hide div depending on radio and checkbox buttons根据单选和复选框按钮显示/隐藏 div
【发布时间】:2016-05-10 11:21:37
【问题描述】:

在这个页面中:http://www.metagame.gg/champions/我有几个过滤器可以显示或隐藏下面的图片。

我已经创建了一个脚本来根据单选按钮的选择显示/隐藏 div,但它仅在选择 5 个选项时才有效。此外,我无法弄清楚如何专门对复选框进行编程。

选择不同字段的结果应通过AND条件关联。

例如:如果我选择 Top 和 Tank and Melee,则显示的 div 应该只有类 .top、.tank .melee

这里是 HTML

<div id="selector">
<div id="selectorTitle">Champions filters</div>

<div id="selectorWrapperFirts">
    <div id="selectorSection">Position</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input name="posi" type="radio" value=".top" /> Top</label></div>
        <div id="buttonWrapper"><label><input name="posi" type="radio" value=".jungle" /> Jungle</label></div>
        <div id="buttonWrapper"><label><input name="posi" type="radio" value=".mid" /> Mid</label></div>
        <div id="buttonWrapper"><label><input name="posi" type="radio" value=".bot" /> Bot</label></div>
    </div>
</div>

<div id="selectorWrapper">
    <div id="selectorSection">Role</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Assassin" /> Assassin</label></div>
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Fighter" /> Fighter</label></div>
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Marksman" /> Marksman</label></div>
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Mage" /> Mage</label></div>
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Support" /> Support</label></div>
        <div id="buttonWrapper"><label><input name="role" type="radio" value=".Tank" /> Tank</label></div>
    </div>
</div>

<div id="selectorWrapper">
    <div id="selectorSection">Damage Type</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input name="dmg" type="radio" value=".AD" /> AD</label></div>
        <div id="buttonWrapper"><label><input name="dmg" type="radio" value=".AP" /> AP</label></div>
        <div id="buttonWrapper"><label><input name="dmg" type="radio" value=".Hybrid" /> Hybrid</label></div>
    </div>
</div>

<div id="selectorWrapper">
    <div id="selectorSection">Power Spike</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input name="powers" type="radio" value=".egame" /> Early game</label></div>
        <div id="buttonWrapper"><label><input name="powers" type="radio" value=".mgame" /> Mid game</label></div>
        <div id="buttonWrapper"><label><input name="powers" type="radio" value=".lgame" /> Late game</label></div>
    </div>
</div>

<div id="selectorWrapper">
    <div id="selectorSection">Skill Ceiling</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input name="skill" type="radio" value=".Low" /> Low</label></div>
        <div id="buttonWrapper"><label><input name="skill" type="radio" value=".Normal" /> Normal</label></div>
        <div id="buttonWrapper"><label><input name="skill" type="radio" value=".High" /> High</label></div>
        <div id="buttonWrapper"><label><input name="skill" type="radio" value=".Vhigh" /> Very High</label></div>
    </div>
</div>

<div id="selectorWrapperLast">
    <div id="selectorSection">Qualities</div>
    <div id="selectorContent">
        <div id="buttonWrapper"><label><input type="checkbox" value=".Ranged" /> Ranged</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Melee" /> Melee</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Crowd-Control" /> Crowd Control</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Engage" /> Engage</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Disengage" /> Disengage</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Counter-Engage" /> Counter engage</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Jungle-Clear" /> Jungle clear</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Burst" /> Burst</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Peel" /> Peel</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Poke" /> Poke</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Scape" /> Scape</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Siege" /> Siege</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Splitpush" /> Splitpush</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Sustain" /> Sustain</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Teamfight" /> Teamfight</label></div>
        <div id="buttonWrapper"><label><input type="checkbox" value=".Wave-Clear" /> Wave clear</label></div>
    </div>
</div>

<div id="resetCheckboxesDiv">
    <button id="resetCheckboxes">Reset</button>
</div>
</div>

这就是图片 HTML 的外观。注意调节过滤器的不同类:

<div class="item  Melee Crowd-Control Engage  Counter-Engage Jungle-Clear Burst  Scape  Splitpush Sustain    Normal egame  Fighter    Tank Hybrid top jungle  ">
    <a href="aatrox">
        <img class="champavatar2" src="/icon/champions/aatrox.png" alt="">
        <div class="textavatar">Aatrox</div> 
    </a>
</div>

<div class="item Ranged  Crowd-Control Engage  Counter-Engage  Burst Poke Scape Siege  Sustain Teamfight Wave-Clear  High mgame Assassin   Mage   AP   mid ">
    <a href="ahri">
        <img class="champavatar2" src="/icon/champions/ahri.png" alt="">
        <div class="textavatar">Ahri</div> 
    </a>
</div>

<div class="item  Melee      Burst  Scape  Splitpush Sustain    Normal lgame Assassin Fighter     Hybrid top  mid ">
    <a href="akali">
        <img class="champavatar2" src="/icon/champions/akali.png" alt="">
        <div class="textavatar">Akali</div> 
    </a>
</div>

<div class="item  Melee Crowd-Control Engage Disengage Counter-Engage    Scape   Sustain Teamfight  Peel High lgame  Fighter   Support Tank AP    bot">
    <a href="alistar">
        <img class="champavatar2" src="/icon/champions/alistar.png" alt="">
        <div class="textavatar">Alistar</div> 
    </a>
</div>

这是我设法创建的 JS。我坚持认为它仅在选择每 5 个单选按钮中的一个选项时才有效。

    $('#selector input').click(function() {
        var position = $('input[name=posi]:checked').val();
        var role = $('input[name=role]:checked').val();
        var dmg = $('input[name=dmg]:checked').val();
        var powers = $('input[name=powers]:checked').val();
        var skill = $('input[name=skill]:checked').val();

        var selected = position + role + dmg + powers + skill;
        $('.item').not(selected).hide();
        $('.item' + selected).show();
    });
    $("#resetCheckboxes").click(function(){
        $("#selector input").removeAttr("checked");
        $('.item').show();
    })

我对 javascript 有点陌生,因此非常感谢任何帮助。 非常感谢您。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    你可以使用.each()

    $('#selector input').on('change',function() {
         var selected = '';
         $('input:checked').each(function(){
            selected += $(this).val();
         });
         alert(selected);
         $('.item').not($(selected)).hide();
         $('.item' + selected).show();
     });
    

    Demo Here

    【讨论】:

      【解决方案2】:

      我没有尝试和测试你的代码...我不得不承认。
      但是作为对您的 js 的第一次快速阅读,我清楚地看到您根据它们的“checked”属性定义了 var。当没有对特定名称输入进行检查时,就会出现漏洞。结果可能是“未定义”的变量。您检查过控制台结果吗?

      我相信设置默认值是个好主意!

      像这样:

      $('#selector input').click(function() {
          if ( $( elem ).is( ":checked" ) ){
              // Your var definition
          }else{
              // Define a default value !
          }
      }
      

      为每个人都这样做。

      【讨论】:

      • 谢谢!这就是问题所在:) 控制台没有给出任何错误。现在我必须添加复选框:S
      • 试试这个控制台日志:console.log(position+" "+role+" "+dmg+" "+powers+" "+skill);
      【解决方案3】:

      您可以检查任何值是否为undefined,然后继续使用show/hide 功能。

      $('#selector input').click(function() {
        var position = $('input[name=posi]:checked').val();
        var role = $('input[name=role]:checked').val();
        var dmg = $('input[name=dmg]:checked').val();
        var powers = $('input[name=powers]:checked').val();
        var skill = $('input[name=skill]:checked').val();
        if (position == undefined || role == undefined || dmg == undefined || powers == undefined || skill == undefined) {} else {
          var selected = position + role + dmg + powers + skill;
          console.log(selected, $('.item' + selected));
          $('.item').not(selected).hide();
          $('.item' + selected).show();
        }
      
      });
      

      请参考这个fiddle

      【讨论】:

        猜你喜欢
        • 2016-09-04
        • 2018-02-27
        • 2011-08-21
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 2015-05-09
        相关资源
        最近更新 更多