JQuery множественным Флажок фильтры

голоса
1

У меня есть список событий, эти события каждый из определенного типа, и начать в определенном месяце. У меня есть флажок группы для типов и один в течение нескольких месяцев. То, что я пытаюсь сделать, это использовать флажки для фильтрации списка. У меня она работает с одной группой, но не могу показаться, чтобы получить его работу с ними.

В основном я пытаюсь установить класс, когда я скрыть элемент списка, так что я знаю, какая группа спряталась, но это, кажется, запутаться. Имена классов являются правильными, но некоторые иногда элементы не получают показаны снова.

Если кто-то может увидеть то, что я делаю неправильно, или думать о лучшем решении, которое было бы здорово! Благодаря!

Даррен.

Мой 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;
});

Мой 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>
Задан 14/07/2009 в 15:27
источник пользователем
На других языках...                            


3 ответов

голоса
4

ID атрибуты ваши LIS являются недействительными - они не могут быть просто цифры. Javascript, вероятно, задыхаться при попытке сделать задания на них.

Смотрите стандарт: http://www.w3.org/TR/REC-html40/types.html#type-name

ID и NAME лексемы должны начинаться с буквы ([A-Za-Z]) и может следовать любое количество букв, цифр ([0-9]), дефис ( "-"), символы подчеркивания ( "_") , двоеточие ( ":"), и периоды ( "").

Ответил 14/07/2009 в 17:48
источник пользователем

голоса
0

Измените эту строку:

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

К этому:

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

Сделать подобное изменение вашего выбора start_check. Это перехватывает clickсобытие вместо changeсобытия ваших флажков на. Это событие будет срабатывать мышь или клавиатура используется ли изменить этот флажок.

Я испытал это на моем компьютере с помощью IE7 и Firefox.

Ответил 14/07/2009 в 18:23
источник пользователем

голоса
0

Хорошо, вот исправление. Изменить:

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

чтобы:

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

в обоих местах.

Ответил 14/07/2009 в 21:59
источник пользователем

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