2010-03-25 89 views
1

複選框組如果我有複選框的羣體,像這樣:驗證使用jQuery

<input type="checkbox" name"checkboxes1" value="#value1"> 
<input type="checkbox" name"checkboxes1" value="value2"> 
<input type="checkbox" name"checkboxes1" value="#value3"> 

<input type="checkbox" name"checkboxes2" value="value1"> 
<input type="checkbox" name"checkboxes2" value="#value2"> 
<input type="checkbox" name"checkboxes2" value="#value3"> 

是否有jQuery的一個簡單的方法,返回值爲1爲每個組複選框,如果同時滿足以下條件適用於:

  • 所有組中以#在自己的價值開始複選框被檢查
  • 組中所有的複選框不帶#在他們的價值開始的不檢查

注意:複選框的名稱是動態生成的,因此組中可以有任何數字,任意數量的組和每個組都可以有任何名稱。

謝謝:)

回答

1

您可以選擇與[attr^=\#]模式的屬性。 所以,你可以編寫類似:

<html> 
<head> 
    <script src="./lib/jquery/jquery-1.3.2.js"></script> 
    <script> 
    var checkall = function() { 

    var withHashAllChecked = true; 
    var withoutHashAllChecked = true; 

$("input.cb1:checkbox[value^=#]").each(function() { 
    if (!this.checked) { 
     withHashAllChecked = false; 
    } 
}); 


$("input.cb1:checkbox:not([value^=#])").each(function() { 
    if (!this.checked) { 
     withoutHashAllChecked = false; 
    } 
}); 

var result = withHashAllChecked && (!withoutHashAllChecked); 
alert(result); 

}; 

$(function() { 
    $("input").click(checkall); 
}); 
    </script> 
</head> 
<body> 
<input class="cb1" type="checkbox" name"checkboxes1" value="#value1">#1</input> 
<input class="cb1" type="checkbox" name"checkboxes1" value="value2">2</input> 
<input class="cb1" type="checkbox" name"checkboxes1" value="#value3">#3</input> 

<input class="cb2" type="checkbox" name"checkboxes2" value="value1">1</input> 
<input class="cb2" type="checkbox" name"checkboxes2" value="#value2">#2</input> 
<input class="cb2" type="checkbox" name"checkboxes2" value="#value3">#3</input> 

</body> 
</html> 

編輯

更新全部工作代碼。這只是檢查cb1類複選框,但只是給你一個想法如何實現。我必須道歉原始代碼有一些問題,我沒有檢查它。無論如何,我嘗試上面的代碼,它應該沒問題(應該修改jquery目錄引用)。

+0

我似乎無法得到它與該代碼的工作 - 總是返回false。我可以將CONTEXT設置爲當前複選框的名稱嗎? – user280533 2010-03-25 11:03:27

+0

我已經設法使用你的代碼完美地工作,並調整它使用名稱,而不是類 - 你做了所有的腿部工作! :)非常感謝... – user280533 2010-03-25 16:36:35

0
var checked = $('input:checkbox:checked[name=checkboxes1][value^=#]').length; 
var notchecked = $('input:checkbox:not(:checked)[name=checkboxes1][value^=#]').length; 
+0

我設法選擇了以#開始使用上面的代碼(但你不需要在開始時包含輸入)的值的複選框,但是如何返回1 if所有具有相同名稱的複選框都將被檢查,如果它們的值以#開頭,如果它們不是?謝謝.. – user280533 2010-03-25 13:00:25

+0

您只需向選擇器中添加所需值的名稱屬性搜索,然後確定它是否找到任何結果。 – PetersenDidIt 2010-03-25 13:16:54

+0

是否可以插入名稱,比如數組?因爲我事先不知道複選框的名稱。因此,爲所有複選框名稱創建一個唯一陣列,其中至少有一個以#開頭的值? 謝謝:) – user280533 2010-03-25 13:29:36