2010-06-28 49 views
0

首先讓我感謝你們所有人爲你的驚人的努力和幫助,迄今爲止。現在回答這個問題。jQuery,如何指示至少一個組中的一個複選框是必需的

我有五個複選框,並且需要檢查五個中的至少一個以根據需要進行驗證。

我已經看到了如何做到這一點的一些方法,但我似乎無法使任何工作。

Solve One Solve Two

現在我同時使用驗證插件和元數據的插件。我怎麼能輕鬆地說,如果一個類0123'複選框被選中,其餘不再需要?我也給所有的複選框class="required"

一如既往的在此先感謝!

編輯:我對不恰當地措詞這個問題表示歉意。我會使用單選按鈕或選擇,因爲它很容易,但要求我使用複選框。再次感謝您的寶貴時間,併爲此感到抱歉。

FINAL EDIT 所以這裏是我如何做到這一點,以防其他人需要。

jQuery.validator.addMethod('ClassAppliedToCheckBoxes', function(value, element, checked) { 
      var $module = $(element).parents('.YourContainerClass'); 
      return $module.find('input:checked').length; 
      }); 

      jQuery.validator.addClassRules("ClassAppliedToCheckBoxes", { 
        'ClassAppliedToCheckBoxes' : true 
      }); 

      jQuery.validator.messages.required_group = 'Please check at least one of these fields.'; 
+0

爲了澄清:如果我檢查2,3,4或所有複選框,您的表單是否仍然驗證我的輸入?至少是一個還是嚴格的一個? – FelipeAls 2010-06-28 05:13:49

回答

2

請不要這樣做。從可用性的角度來看,這是一種可怕的做法。只要用戶看到複選框,他們就會認爲會有多個選擇。對於單選,我們有放射性元素。給他們所有人同名,他們將是獨家。

實施例:

I am a:<br/> 
<input type="radio" id="age_old" name="age" value="old"> 
    <label for="age_old">Oldtimer</label><br/> 
<input type="radio" id="age_mid" name="age" value="mid" checked> 
    <label for="age_mid">Middle-aged</label><br/> 
<input type="radio" id="age_young" name="age" value="young"> 
    <label for="age_young">Youth</label><br/> 

加成:無JavaScript的需要 - 所有普通的HTML。如果您需要任何選擇的能力,只需添加另一個單選框一個空值:

<input type="radio" id="age_no" name="age" value=""> 
    <label for="age_no">...not telling!</label><br/> 

UPDATE:有人指出,這不是一個問題是關於什麼。如果是這種情況,並且需要其他閱讀(「至少需要設置一個複選框」),請忽略此操作。

+1

re:可用性,我認爲用戶可以選擇1到5.如果他們選擇0,那麼應該停止表單提交。 – nickf 2010-06-28 01:32:45

+0

@nickf:...嗯?我自己和OP都沒有提到1-5,0,也沒有停止提交,我看到... – Amadan 2010-06-28 01:48:29

+0

是的,這是一個「不這樣做」的情況,真的是正確的答案 - 除非我們在這裏錯過了一些東西。你永遠不需要多於一件物品來檢查,對吧? – harpo 2010-06-28 01:57:52

0

嘗試這樣:

var $invalid = $(":checkbox.required").filter(function() { 
    var n = this.name; 
    return $(":checkbox[name='" + n "']:checked").length == 0; 
}); 

從那裏,你可以做一些事情。要停止表單提交,請檢查長度是否大於零(如果是,則存在一些無效的表單)。爲了突出無效答卷:

$invalid.parent().css({ color: '#f00' }); 

請注意,這並不是一個非常高效的算法:它將對同一組內的支票多次有複選框。如果這是一個瓶頸,那麼有一個地方可以改進,但無論如何這將是一個很好的起點。

1

我同意Amadan複選框不是要走的路。複選框有多種選擇。如果你正在尋找使形式訪問,然後使之成爲SELECT

<label for="myselect">Choose type of house</label> 

<select name="myselect" id="myselect" class="required"> 
    <option value="1">Option 1 Text</option> 
    <option value="2">Option 2 Text</option> 
    <option value="3">Option 3 Text</option> 
    <option value="4">Option 4 Text</option> 
    <option value="5">Option 5 Text</option> 
</select> 

這會使你的形式更加善待人誰與屏幕閱讀器導航吧。 Radio buttons causes some issues適用於通過表單進行選擇的人。

+0

我確實同意'SELECT'在功能上差不多 - 但是無線電盒在視覺上更接近於複選框,所以我認爲它是一種天然的替代品。然而(並且沒有被禁用,我可能會或可能不會是正確的),正確編碼的CB/RB不會比選擇框導航更少。我想你會在我的例子中看到,即使在不知不覺中,我也遵循了鏈接中的建議(使用'label',緊跟在RB之後的文本)。我承認RB經常被嚴重編碼,但其他所有事情也是如此。鱘魚的法則。 – Amadan 2010-06-28 02:14:26

+0

我同意單選按鈕更具視覺吸引力。我選擇的問題是使屏幕閱讀器更容易導航(單選按鈕往往是這些人的問題)。如果您有機會,請與一位正在使用屏幕閱讀器瀏覽網頁的視障人士進行會話。這確實是一個開眼界和一個學習體驗。 – 2010-06-28 02:27:36

+0

對不起,我遇到的唯一一位視障人士是聾啞人,他們對克羅地亞人的平均說話不好,英語嚴重不講話。我從來沒有接觸過屏幕閱讀器,看到克羅地亞人不怎麼流行,並且不會很好地幫助那些人(除非有人想出一個機器人手臂,同時翻譯成克羅地亞標誌)。編輯:不諷刺。我曾經爲一個聾啞盲人組織做志願者。 – Amadan 2010-06-28 05:44:34

相關問題