jQuery filtros de casilla de verificación múltiples

votos
1

Tengo una lista de eventos, estos eventos son de un tipo específico y comienzan en un mes específico. Tengo un grupo de casillas de verificación para tipos y uno por meses. Lo que intento hacer es usar las casillas de verificación para filtrar la lista. Lo tengo trabajando con un grupo, pero parece que no funciona con dos.

Básicamente, estoy tratando de establecer una clase cuando oculto el elemento de la lista, entonces sé qué grupo lo ocultó, pero parece confundirse. Los nombres de las clases son correctos, pero algunas veces los elementos no se muestran nuevamente.

Si alguien puede ver lo que estoy haciendo mal, o piensa en una mejor solución, ¡sería genial! ¡Gracias!

Darren.

Mi 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;
});

Mi 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>
Publicado el 14/07/2009 a las 15:27
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
4

Los atributos de ID en sus LI no son válidos; no pueden ser solo números. Javascript probablemente se ahogará al intentar hacer asignaciones en ellos.

Vea el estándar: http://www.w3.org/TR/REC-html40/types.html#type-name

Los tokens de ID y NAME deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier cantidad de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_") , dos puntos (":") y puntos (".").

Respondida el 14/07/2009 a las 17:48
fuente por usuario

votos
0

Cambiar esta línea:

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

A esto:

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

Haga un cambio similar a su selector start_check. Esto enlaza el clickevento en lugar del changeevento en tus casillas de verificación. Este evento se activará si el mouse o el teclado se usan para alterar la casilla de verificación.

Lo probé en mi computadora usando IE7 y Firefox.

Respondida el 14/07/2009 a las 18:23
fuente por usuario

votos
0

OK, aquí está la solución. Cambio:

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

a:

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

en ambos lugares.

Respondida el 14/07/2009 a las 21:59
fuente por usuario

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