2012-03-08 2 views
0

JSFIDDLEПроверьте все дивы скрыты

$(document).ready(function() { 
    $(".chk").click(function() { 
     $(".chk:checked").each(function() { 
      $("."+this.id).show(); 
     });  
     $(".chk:not(:checked)").each(function() { 
      $("."+this.id).hide(); 
     }); 
     // give a message if nothing left to show  
    }); 
}); 

<label> 
    <input class="chk" type="checkbox" checked="checked" id="course">Courses 
</label> 
<label> 
    <input class="chk" type="checkbox" checked="checked" id="morning">Morning 
</label> 
<label> 
    <input class="chk" type="checkbox" checked="checked" id="evening">Evening 
</label> 
<ul> 
    <li class="courseBox course">Course</li> 
    <li class="courseBox course evening">Course, Evening</li> 
    <li class="courseBox morning">Morning </li> 
</ul>​ 

Как наиболее элегантно знать, если были скрыты все затронутые дивы?


UPDATE: Если вам нужно проверить после FADEOUT, необходимо поставить галочку в функции обратного вызова:

$(".chk:not(:checked)").each(function() { 
    $("."+this.id).fadeOut(function() { 
    if (!$('.courseBox:visible').length) { 
     alert('all are hidden'); 
    } 
    }); 
}); 
+2

Вы не доверяете .show() и .hide()? – j08691

+1

@ j08691: Это яснее в jsFiddle. Каждый флажок скрывает определенные элементы. Из-за перекрывающихся классов все элементы могут быть скрыты до того, как все флажки сняты. –

ответ

0

Вы можете попробовать это:

$('ul').find(':hidden').length 

Это даст вы не указали количество элементов под «ul»

2

Вам нужен :visible селектор:

if ($('div:visible').length == 0) alert('no more divs!'); 
+0

Gotta меняет «div» на «li» ... @mplugjan использует элементы списка ... но это тоже работает –

+0

Oh. Я просто ушел с его вопроса: «Как я изящно знаю, были ли скрыты все затронутые div?». Не нужно было смотреть на jsfiddle для чего-то такого простого. –

+0

Право на ... Да ... это тоже меня бросило ... Я испортил jsFiddle, и он не работал ... lol –

2

Подсчитайте видимые элементы LI:

if ($('ul li:visible').length == 0) { 
    alert("Everything is gone!") 
} 

Подробнее:

:visible selector

+0

+1 для публикации документов! –

0

Ваш код может быть упрощен как показано ниже.

$(document).ready(function() { 
    $(".chk").click(function() { 
     $("." + this.id).toggle(this.checked); 
     if($(".courseBox:visible").length == 0){ 
      alert("All divs are hidden"); 
     } 
    });   
}); 

Работа демо - http://jsfiddle.net/ShankarSangoli/JrAhR/13/

+0

@mplungjan - Это то, что вы искали? – ShankarSangoli

+0

вы можете проверить свой код? Похоже, что он работает изначально, но после снятия отметки и проверки пересечение больше не работает. Мой начальный код правильно обрабатывает пересечение – mplungjan

+0

Просто проверил вашу скрипку. Он не работает правильно – mplungjan

Смежные вопросы