2013-09-18 3 views
-1

Недавно я задал другой вопрос о переключении классов. Сначала я думал, что есть решение, но похоже, что у меня все еще есть проблемы. Я пытаюсь создать небольшой сайт, который показывает неудачи и успехи для некоторых предметов. Вот пример того, что я пытаюсь построить: http://jsfiddle.net/zrYLh/4/Переключение условного класса

Как сайт должен работать: Если я проверяю ящик для компьютера A, компьютеры A, B, C & D должна покраснеть. Если я тогда поставлю флажок для компьютера B, ничего не изменится. Если я сниму флажок для компьютера B, все элементы должны по-прежнему оставаться красными, потому что компьютер A по-прежнему проверяется, и он должен быть красным для A, B, C и D на своем собственном. Такая же логика должна выполняться для любой комбинации проверок.


В настоящее время код заставляет определенные элементы переключаться обратно на зеленый, даже если другой предмет требует, чтобы они оставались красными. Например, когда A и B проверяются, а затем B не отмечен, он заставляет A и C идти зеленым.

Вот мой сценарий, как сейчас:

$('#computerA').click(function(){ 
    var state = this.checked; 
    $('#computerA2, #computerB2, #computerC2, #computerD2').toggleClass('green', !state).toggleClass('failure', state); 
}) 

$('#computerB, #computerC, #computerD').click(function(){ 
    var state = this.checked || $('#computerA').is(':checked'); 
    $(this).prev().toggleClass('green', !state).toggleClass('failure', state); 
}) 

$('#computerB').click(function(){ 
    var state = this.checked; 
    $('#computerA2, #computerC2').toggleClass('green', !state).toggleClass('failure', state); 
}) 

$('#computerA, #computerC').click(function(){ 
    var state = this.checked || $('#computerB').is(':checked'); 
    $(this).prev().toggleClass('green', !state).toggleClass('failure', state); 
}) 

Любая помощь будет принята с благодарностью - спасибо!

ответ

0

Установите этот код: http://jsfiddle.net/JB3kM/1/.

Пожалуйста, обратите внимание, что вы не указали, что должно произойти, если вы сделаете следующее:

  1. Проверить
  2. Проверить B
  3. Снимите отметку

Если тогда B зеленый или все еще? Если B, удалите деталь this.checked && из строки 3 ...

1

Я не уверен, что вы после, но если я понимаю вас правильно, на самом деле существует только css-решение.

Посмотрите на это: http://jsfiddle.net/zrYLh/5/

Что я сделал:

  • Я перестроенный ваш HTML немного. Не все необходимое, но более семантически корректное imo и намного проще поддерживать, удаляя много идентификаторов. Тем не менее, необходимо поместить метку перед тем, как установить флажок для этой техники.
  • Реструктуризация означала, что я изменил некоторые из ваших css, чтобы заставить его работать снова. Снова немного проще поддерживать сейчас и избавиться от большей части абсолютного позиционирования (используйте их только в том случае, если это единственный возможный способ, или вы пожалеете об этом, когда когда-либо придется что-то изменить в своем коде)

«волшебный» лежит в следующей строке CSS:

#business input[type="checkbox"]:checked ~ label { 
    background-color: red; 
} 

Этот селектор позволяет выбрать все ярлыки, которые предшествуют проверяемой флажок.

Для получения дополнительной информации вы можете прочитать о классе :checked псевдо:
http://css-tricks.com/almanac/selectors/c/checked/
Или это о селекторе родственного ~:
http://css-tricks.com/almanac/selectors/g/general-sibling/

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