Question

Où tout a commencé : J'ai déjà posé une question sur les filtres ici: Filtre Résultat à l'aide de jQuery ou JS à partir d'un ensemble de valeur existant

Problème :
Puisque les données proviennent d'une autre page via un form post, toutes les valeurs sont censées être visibles au début ...... afin que l'utilisateur puisse passer par ces données et si nécessaire, il a le privilège d'utiliser des filtres pour régler l'exigence.

Qu'est-ce qui me fait me sentir comme un train en trainEst-ce que les valeurs (à filtrer) à la page sont censées être visibles par défaut, puis lorsque l'utilisateur clique sur Say Say class="tv", tous les autres div classes qui ne contiennent pas tv devrait se cacher

Où je suis coincé ???
J'ai essayé de trouver une jQuery que je pensais être correcte logiquement, mais le résultat m'a fait croire autrement :(

Problème avec la question précédente
Ma question précédente a aidé à filtrer ... mais les données étaient hide() Par défaut ... j'avais besoin de revers ...

Effort et violon ??
Violon : http://jsfiddle.net/logintomyk/r6g3k/1/

Html

<!-- filter checkboxes -->
    <input type="checkbox" id="wm" class="a" />WM
    <input type="checkbox" id="tv" class="a" />tv
    <input type="checkbox" id="ac" class="a" />ac
    <input type="checkbox" id="terrace" class="a" />terrace


    <br> <hr><br>

   <!-- Results to be filtered -->
    <div class="wm field">WM</div>
    <div class="tv field">TV</div>
    <div class="ac field">ac</div>
    <div class="terrace field">terrace</div>
    <div class="wm tv field">WM TV</div>
    <div class="wm tv ac field">wm tv ac</div>
    <div class="wm terrace field">wm terrace</div>
    <div class="tv field">tv</div>
    <div class="tv ac field">tv ac</div>

mon noob jquery

$(document).ready(function () {
     $('.field').show(); // to show values by default


    $(".a").change(function () {
        $('div').hide(); //hide before displaying
        $(':checkbox:not(:checked)').each(function() {
            $("." + this.id).hide(); //hide unchecked filter values
        });
    }).change();
}); 
Était-ce utile?

La solution

Cela pourrait être plus facile

var puts = $('.a');//get checkboxes
var cans = $('.field');//get content
puts.on('change', function() {//when checkbox changes
    if (!puts.filter(':checked').length) {//if nothing's checked
        cans.show();//show it all
    } else {//if something's checked
        cans.hide();//hide all
        puts.filter(':checked').each(function() {//get checked
            $('.'+this.id+':hidden').show();//show if hidden
        });  
    }
});

fait un violon: http://jsfiddle.net/filever10/f8vk2/

panne

puts est les cases à cocher

cans est les blocs de contenu

Lorsqu'un état à cocher change, si rien n'est actuellement coché, il affiche tout. Si quelque chose est vérifié, il masque tous les blocs de contenu et affiche ceux qui ont une classe qui correspond id d'une case cochée. Il montre uniquement des choses cachées, il n'a donc pas à s'exécuter plusieurs fois sur des blocs de contenu qui s'appliquent à plusieurs cases cochées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top