2013-10-23 271 views
1

我有一个基本的背景图像和两个复选框。我需要用正确的类替换背景图片(通过切换类),具体取决于选择哪个复选框。如果两个复选框都选中,我需要它显示黑色背景。复选框选择与jQuery的问题

http://jsfiddle.net/2k96D/6/

$('#ax_lab').change(function() { 
    if ($('#ax_ov').is(':checked')) { 
     $('.axial').toggleClass('axial_all'); 
    } else{ 
     $('.axial').toggleClass('axial_lab'); 
    } 
}); 

$('#ax_ov').change(function() { 
    if ($('#ax_lab').is(':checked')) { 
     $('.axial').toggleClass('axial_all'); 
    } else{ 
     $('.axial').toggleClass('axial_over'); 
    } 
}); 

我的小提琴完美的作品时,我选择并以相同的顺序取消,但是,如果我取消以不同的顺序,比我在选择它们的顺序复选框,这不是” t默认回到原来的类。我知道我的逻辑必然存在缺陷,我只是无法找到它。有什么想法吗?

回答

2

你需要更加明确的逻辑。以下是我所做的:

$(document).ready(function() { 
    function updateAxialStatus() { 
     var axOv = $('#ax_ov').prop('checked'), 
      axLab = $('#ax_lab').prop('checked'); 

     $('.axial').removeClass('axial_all axial_lab axial_over'); 
     if (axOv && axLab) 
      $('.axial').addClass('axial_all'); 
     else if (axOv) 
      $('.axial').addClass('axial_over'); 
     else if (axLab) 
      $('.axial').addClass('axial_lab'); 
    } 

    $('#ax_lab, #ax_ov').change(updateAxialStatus); 
}); 

该版本只是明确检查两个复选框的状态并更新类以反映状态。相同的处理程序可以用于这两个复选框。

请注意,旧版本的IE可能不会触发复选框的“更改”事件,直到复选框失去焦点,但您可以安全地使用“点击”。

+0

对于JS来说还是比较新的,所以创建变量来表示它的检查状态的想法甚至没有出现在我身上。一个问题,这条线有什么功能。 “......改变(updateAxialStatus);” – user1504591

+1

@ user1504591设置两个复选框的事件处理程序。 “id”选择器与逗号组合。更新函数的名称被传入,所以它将被用作事件处理程序。 – Pointy

+0

所以这两个id都与事件处理函数一致,并且函数也是如此。因此,单击任何一个id调用updateAxialStatus函数的“change”,然后根据if语句中的条件添加或删除该类。抱歉的运行。 – user1504591