jQuery multiple CheckBox filtry

hlasů
1

Mám seznam událostí, tyto události jsou každý z určitého typu, a začít v určitém měsíci. Mám políčko skupiny u různých typů a jeden pro měsíců. Co se snažím udělat, je pomocí zaškrtávacích políček filtrovat seznam. Mám to pracovat s jednou skupinou, ale nedokážu si to pracovat s nimi.

V podstatě se snažím nastavit třídu, když jsem se skrýt položky seznamu, takže vím, které ji skupina skryl, ale zdá se, že se zmást. Názvy tříd jsou správné, ale některé položky někdy nedostanou opět zobrazí.

Jestli někdo může vidět, co dělám špatně, nebo si představit lepší řešení, které by bylo skvělé! Dík!

Darren.

My JavaScript:

$(#options input.type_check).change(function() {
    if($(this).is(':checked')) {
        $(#events li.+$(this).attr('id')).removeClass('type_hidden');
        if(!$(#events li.+$(this).attr('id')).hasClass('start_hidden')) {
            $(#events li.+$(this).attr('id')).slideDown();
        }
    } else {
        $(#events li.+$(this).attr('id')).addClass('type_hidden');
        $(#events li.+$(this).attr('id')).slideUp();
    }
    return false;
});

$(#options input.start_check).change(function() {
    if($(this).is(':checked')) {
        $(#events li.+$(this).attr('id')).removeClass('start_hidden');
        if(!$(#events li.+$(this).attr('id')).hasClass('type_hidden')) {
            $(#events li.+$(this).attr('id')).slideDown();    
        }
    } else {
        $(#events li.+$(this).attr('id')).addClass('start_hidden');
        $(#events li.+$(this).attr('id')).slideUp();
    }
    return false;
});

My HTML:

<p>Types:</p>
<div><input name=type[] type=checkbox id=type_0 value=0 class=type_check checked=checked /><label for=type_0>Type 0</label></div>
<div><input name=type[] type=checkbox id=type_1 value=1 class=type_check checked=checked /><label for=type_1>Type 1</label></div>
<div><input name=type[] type=checkbox id=type_2 value=2 class=type_check checked=checked /><label for=type_2>Type 2</label></div>
<div><input name=type[] type=checkbox id=type_3 value=3 class=type_check checked=checked /><label for=type_3>Type 3</label></div>
<div><input name=type[] type=checkbox id=type_4 value=4 class=type_check checked=checked /><label for=type_4>Type 4</label></div>

<p>Starts:</p>
<div><input name=start[] type=checkbox id=start_072009 value=072009 class=start_check checked=checked /><label for=type_072009>July 2009</label></div>
<div><input name=start[] type=checkbox id=start_082009 value=082009 class=start_check checked=checked /><label for=type_082009>August 2009</label></div>
<div><input name=start[] type=checkbox id=start_092009 value=092009 class=start_check checked=checked /><label for=type_092009>September 2009</label></div>
<div><input name=start[] type=checkbox id=start_102009 value=102009 class=start_check checked=checked /><label for=type_102009>October 2009</label></div>

<p>Events</p>
<ul id=events>
    <li id=1768 class=type_0 start_072009>Event 1</li>
    <li id=2190 class=type_1 start_072009>Event 2</li>
    <li id=2191 class=type_2 start_072009>Event 3</li>
    <li id=1864 class=type_2 start_082009>Event 4</li>
    <li id=1679 class=type_3 start_082009>Event 5</li>
    <li id=2042 class=type_0 start_092009>Event 6</li>
    <li id=1717 class=type_4 start_092009>Event 7</li>
    <li id=1917 class=type_4 start_092009>Event 8</li>
    <li id=1767 class=type_4 start_092009>Event 9</li>
    <li id=1866 class=type_2 start_102009>Event 10</li>
</ul>
Položena 14/07/2009 v 15:27
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
4

atributy ID na vaše LIS jsou neplatné - nemohou být jen čísla. Javascript bude pravděpodobně dusit, když se snaží, aby přiřazení k nim.

Viz standard: http://www.w3.org/TR/REC-html40/types.html#type-name

ID a NAME žetony musí začínat písmenem ([A-Za-z]) a může následovat libovolný počet písmen, číslic ([0-9]), pomlčky ( "-"), podtržítka ( "_") , dvojtečky ( ":") a tečky ( "").

Odpovězeno 14/07/2009 v 17:48
zdroj uživatelem

hlasů
0

Změňte tento řádek:

$("#options input.type_check").change(function() {

K tomuto:

$("#options input.type_check").click(function() {

Dělat podobnou změnu vašeho voliče start_check. Toto zavěsí clickudálost namísto changeudálost na svých políček. Tato akce se bude platit, zda je myš nebo klávesnice se používá k úpravě políčko.

Testoval jsem to na mém počítači pomocí IE7 a Firefox.

Odpovězeno 14/07/2009 v 18:23
zdroj uživatelem

hlasů
0

OK, tady je řešení. Změna:

if(!$("#events li."+$(this).attr('id')).hasClass('start_hidden')) {
    $("#events li."+$(this).attr('id')).slideDown();
}

na:

$("#events li).not(".type_hidden, .start_hidden").slideDown();

na obou místech.

Odpovězeno 14/07/2009 v 21:59
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more