Использование jquery для скрытия или отображения нескольких div

У меня общая проблема, но с уникальным поворотом. У меня есть список флажков. Для каждого флажка я хочу скрыть/показать один или несколько разделов. Что-то вроде этого: если я устанавливаю флажок 1, отображается div 1. Если я устанавливаю флажок 2, отображается div 2. Если я отмечу флажок 3, отобразятся элементы 1 и 2. Вот поворот, если я устанавливаю флажки 1 и 3, затем снимаю флажок 3, я хочу, чтобы div 1 оставался видимым. Код будет примерно таким (работают только флажки 1 и 2) -

<input type="checkbox" name="1">1
<input type="checkbox" name="1">1
<input type="checkbox" name="2">2
<input type="checkbox" name="2">2
<input type="checkbox" name="???">1&2

<div id="showme1" style="display: none">Show me1</div>
<div id="showme2" style="display: none">Show me2</div>

<script type="text/javascript">

var MyCheckboxes1=$("input[name='1']");

MyCheckboxes1.change(function() {
  $("#showme1").toggle(MyCheckboxes1.is(":checked"));
});

var MyCheckboxes2=$("input[name='2']");

MyCheckboxes2.change(function() {
  $("#showme2").toggle(MyCheckboxes2.is(":checked"));
});
</script>

person user1431891    schedule 02.06.2012    source источник
comment
В качестве обновления я попытался использовать класс для этого, назначив два класса полям 1 и 2, например: ‹input type=checkbox class=1 class=2›, но все равно не повезло. ОНО признало только первое. Я начинаю задаваться вопросом, должно ли это быть более сложным, чем я планировал :(   -  person user1431891    schedule 03.06.2012


Ответы (4)


как насчет чего-то подобного, простой логики, использующей операторы if else, основанные на том, установлен флажок или нет: http://jsfiddle.net/qvhpfzs7/

<input type="checkbox" id="c1"/> show Div 1
<br/>
<input type="checkbox" id="c2"/> show Div 2
<br/>
<input type="checkbox" id="c3"/> show Div 1 AND Div 2
<br/><br/>
<div class="div1">THIS IS THE CONTENT OF DIV 1</div>
<div class="div2">THIS IS THE CONTENT OF DIV 2</div>

$(document).ready(function(){
    $('.div1').hide();
    $('.div2').hide();
    var d1 = false;
    var d2 = false;
    $('input[type="checkbox"]').on('change', function(){
        if ($('#c1').is(':checked')) { d1 = true; }
        else { d1 = false; }
        if ($('#c2').is(':checked')) { d2 = true; }
        else { d2 = false; }
        if ($('#c3').is(':checked')) {
            d1 = true;
            d2 = true;
        }
        if (d1) { $('.div1').show(); } else { $('.div1').hide(); }
        if (d2) { $('.div2').show(); } else { $('.div2').hide(); }  
    });
});
person indubitablee    schedule 01.01.2015

Хорошо, после некоторой игры и идеи от друга и умника по имени Брайан, вот что я придумал для решения. Довольно просто, как только я подумал об этом.

HTML-

<div id="showme1" style="display: none">Show me1</div>
<div id="showme2" style="display: none">Show me2</div>

JS-

var MyCheckboxes1=$("input[class='1']");

MyCheckboxes1.change(function() {
  $("#showme1").toggle(MyCheckboxes1.is(":checked") || MyCheckboxes12.is(":checked"));
});

var MyCheckboxes2=$("input[class='2']");

MyCheckboxes2.change(function() {
  $("#showme2").toggle(MyCheckboxes2.is(":checked") || MyCheckboxes12.is(":checked"));
});


var MyCheckboxes12=$("input[class='12']");

MyCheckboxes12.change(function() {
  $("#showme1").toggle(MyCheckboxes1.is(":checked") || MyCheckboxes12.is(":checked"));
  $("#showme2").toggle(MyCheckboxes2.is(":checked") || MyCheckboxes12.is(":checked"));
});
person user1431891    schedule 06.06.2012

Хорошо, это то, что у меня есть. Проверьте код ниже

  <input type="checkbox" name="1">1
  <input type="checkbox" name="1">1
  <input type="checkbox" name="2">2
  <input type="checkbox" name="2">2
  <!-- <input type="checkbox" name="???">1&2 -->
  <input type="checkbox" name="3">3

  <div id="showme1" style="display: none">Show me1</div>
  <div id="showme2" style="display: none">Show me2</div>

<script>
  var MyCheckboxes1=$("input[name='1']");

  MyCheckboxes1.change(function() {
    $("#showme1").toggle(MyCheckboxes1.is(":checked"));
  });

  var MyCheckboxes2=$("input[name='2']");

  MyCheckboxes2.change(function() {
    $("#showme2").toggle(MyCheckboxes2.is(":checked"));
  });

  var MyCheckboxes3=$("input[name='3']");

  MyCheckboxes3.change(function() {
       <!-- for checkbox 3 I just toggled showme 1 & 2 -->
      $("#showme1").toggle();
      $("#showme2").toggle();
  });    
</script>

Если выбраны 1 и 3, снимите флажок 3, чтобы 1 по-прежнему отображался.

person mkCode    schedule 01.01.2015

Вот что я пробовал. Надеюсь это поможет.

JavaScript -

function handleClick(cb) {
        if(cb.checked==true){
            if(cb.name==3){ // Show both div
                $('#showme1').show();
                $('#showme2').show();
            }else{
                $('#showme'+cb.name).show();
            }
        }else{
            if(cb.name==3){ // Show both div 
                $('#showme1').hide();
                $('#showme2').hide();
            }else{
                $('#showme'+cb.name).hide();
            }
        }
      }

HTML -

<input type="checkbox" name="1" onclick='handleClick(this);'>1
<input type="checkbox" name="1" onclick='handleClick(this);'>1
<input type="checkbox" name="2" onclick='handleClick(this);'>2
<input type="checkbox" name="2" onclick='handleClick(this);'>2
<input type="checkbox" name="3" onclick='handleClick(this);'>3

<div id="showme1" style="display: none">Show me1</div>
<div id="showme2" style="display: none">Show me2</div>

Вы также можете использовать toggle() при первоначальном отображении div(s).

person HeiN    schedule 01.01.2015