2011-04-20 144 views
1

這涉及到另一個問題,我問,但更復雜(的問題在這裏:jQuery - Able to disable checkboxes on condition, but odd problemjQuery的 - 多狀態禁用複選框

我現在已經禁用基於選擇框選擇複選框工作代碼:http://jsfiddle.net/gDHGY/2/

上面鏈接中的代碼將根據年級級別禁用複選框。我需要進一步禁用基於其他複選框選擇的複選框。例如,如果一個包含「am」和「week1」類的複選框被切換,我需要禁用所有其他的「am week1」複選框。還有一整天叫「全」。另一個例子是:如果選中了「全周1」類的複選框,我需要禁用「am week1」和「pm week1」複選框。總共有6周的營業時間,只有AM,PM和全天選項。我真的希望這一切都有道理。如果不是所有的方式讓我知道,我會盡力解釋更好。

是否有可能修改我必須這樣做的代碼,或者我正在使用二級代碼來完成此操作?

編輯#2:再次更新上面的jsFiddle鏈接。

更新#1:Ian的代碼工作得很好我只需要弄清楚如何在頁面加載時檢查複選框時如何使它運行相同的功能。

+0

你的意思是如果你切換「am week1」,另一個「pm week1」將會禁用?因爲我沒有看到任何其他與已啓用複選框組合在一起的「week1」 – 2011-04-20 06:09:40

+0

@Ian Jasper Bardoquillo你說的很對 - 我沒有足夠的複選框來完成這個場景。對於那個很抱歉。我剛剛將上面的鏈接更新爲一個帶有更多複選框的鏈接。 http://jsfiddle.net/gDHGY/1/ – Vincent 2011-04-20 06:34:08

+0

基於你更新的jsfiddle,我想知道你是否改變了類,或者邏輯也被改變了......如果我在第一週切換,例如什麼checbox會禁用?我是否應該在第1周仍然查找並禁用它,或者適用新規則? – 2011-04-20 06:57:52

回答

2

請檢查我的解決方案。希望這有助於:)

http://jsfiddle.net/gDHGY/3/

+0

非常有幫助,它的工作很好。你如何去做同樣的事情,不僅僅是點擊一個複選框,而且如果其中一個複選框在頁面加載時被選中(如輸入標籤包含checked = yes)?謝謝伊恩。 – Vincent 2011-04-20 14:48:52

+0

歡迎來到文森特:)請將它標記爲正確答案:) 那麼這將如何呢?我是否應該首先在下拉列表中選擇一個項目,然後查看是否有複選框被選中並觸發事件? – 2011-04-21 01:53:29

+0

對不起,我以爲我標記了它。完成。 :)在被選中的情況下,下拉選項也將被選中。我使用PHP根據會話變量填充數據,並且如果人員已經足夠遠以填充數據,那麼已經在下拉框中選擇了分數。這是我確保jQuery代碼禁用基於等級的複選框工作在頁面加載的原因之一,而不僅僅是用戶輸入。再次感謝! – Vincent 2011-04-21 03:50:35

0

從看你的代碼,我想你需要的是一個事件綁定到你的複選框:

$('input[type=checkbox]').click(function() { 
    var classList = $(this).attr('class').replace(/\s+/g, "."); 
    if ($(this).attr('checked')) { 
     $('input.' + classList).attr('disabled', 'true'); 
     $(this).removeAttr('disabled'); 
    } else { 
     $('input.' + classList).removeAttr('disabled', 'true'); 
    } 
}); 

這並不能完全解決您的問題,因爲它只禁用完全相同的類(即選擇完整的week1不會禁用week1類),但是classList上的一些正則表達式來改變它所尋找的應該爲您解決這個問題(對不起 - 這會自己做,但咖啡因的今天早上還沒踢完)

+2

我看到伊恩提出了一個更好的解決方案 - 我會親自去 – 2011-04-20 08:31:47