2013-10-23 217 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