2013-09-18 1 views
0

Я пытаюсь создать небольшой веб-сайт, на котором отображаются сбои. Вот пример jsfiddle: http://jsfiddle.net/hnQN7/2/Правильно переключается класс

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

Каков наилучший способ для этого?

Вот сценарий, я в настоящее время:

$('#computerA').click(function(){ 
    $('#computerA2').toggleClass('green failure'); 
    $('#computerB2').toggleClass('green failure'); 
    $('#computerC2').toggleClass('green failure'); 
    $('#computerD2').toggleClass('green failure'); 
}) 

$('#computerB').click(function(){ 
    $('#computerB2').toggleClass('green failure'); 

}) 

$('#computerC').click(function(){ 
    $('#computerC2').toggleClass('green failure'); 

}) 

$('#computerD').click(function(){ 
    $('#computerD2').toggleClass('green failure'); 

Прошу прощения, если это немного сбивает с толку. Заранее спасибо за вашу помощь!

+0

Я бы предпочел, чтобы лучший способ был, когда вы нажимаете «А», все остальные флажки должны быть отключены. его просто так .. –

ответ

2

Попробуйте

$('#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); 
}) 

Demo: Fiddle

+0

Это сработало хорошо, но теперь я столкнулся с дополнительной проблемой. Я обновил скрипку здесь: http://jsfiddle.net/zrYLh/3/. Когда я нажимаю на A и B, затем снимите флажок B, он отображает, что A и C зеленые, - когда C все равно должен быть сбой. Если у вас есть предложения по устранению этой проблемы, это было бы здорово - спасибо! – user2155400

+0

@ user2155400 - почему вы добавили больше кода для скрипки, созданной Аруном? Он не показывает проблему, на которую вы указываете. – j08691

+0

Я хотел иметь возможность делать то же самое, что и он, и применять его к дополнительным комбинациям проверок – user2155400

0
$('#computerB').click(function(){ 
    !$('#computerA2').hasClass('failure') ? $('#computerB2').toggleClass('green failure') : ''; 
}); 

Проверьте, чтобы увидеть, если компьютер А не имеет терпеть неудачу класс, и если нет, то выполнить пуговицу, иначе ничего не делать.

0

Может быть, просто добавьте эту строку в обработчиках клик для других элементов:

  $('#computerB').click(function(){ 
       validateComputerA($('#computerB2')) 

и добавить функцию, чтобы обрабатывать все это, а затем просто назвать его и передать в вашем конкретном компьютере.

function validateComputerA($comp){ 
     if(!$('#computerA2').hasClass('failure')){ 
     $comp.toggleClass('green failure'); 
     } 
    } 
Смежные вопросы