检查是否定义了复选框的更好方法是什么?

时间:2010-07-11 13:52:05

标签: javascript jquery

目前我正在使用

var email, fax, sms = false;  
    if($('#uemail:checked').val() != undefined)  
        email = true;  
    if($('#ufax:checked').val() != undefined)  
        fax = true;  
    if($('#usms:checked').val() != undefined)  
        sms = true;  

但写它的方式还有很长的路要走。

有更好的方式来写这个吗?

3 个答案:

答案 0 :(得分:10)

试试这个:

if($('#uemail').is(':checked'))
    email = true;

甚至更短:

email = $('#uemail').is(':checked');

您将:checked选择器传递给jQuery的.is()方法,该方法返回一个布尔值;

答案 1 :(得分:5)

您可以使用.length,如下所示:

var email = $('#uemail:checked').length,
      fax = $('#ufax:checked').length,
      sms = $('#usms:checked').length;

.length是匹配元素数组的长度...如果未选中,则为0。由于.length == 0用于JavaScript中的.length == false,因此您可以执行上面的简短版本。如果你需要一个真/假,那么只需改为.length != 0:)

或者,另一种产生布尔值的替代方案,只需使用DOM .checked property

var email = $('#uemail')[0].checked,
      fax = $('#ufax')[0].checked,
      sms = $('#usms')[0].checked;

或者,根本没有jQuery只使用getElementById()

var email = document.getElementById('uemail').checked,
      fax = document.getElementById('ufax').checked,
      sms = document.getElementById('usms').checked;

答案 2 :(得分:2)

另一种方法是使用关联数组然后遍历键。肯定会更DRY

// Initialise all the checkbox values as unknown
var items = {
  "email" : none,
  "fax"   : none,
  "sms"   : none
};

// Loop through each checkbox index
for (var index in items) {

   // Get the id of the checkbox
   var id = '#u' + index;

   // Find out if the checkbox is checked
   items[index] = $(id).is(':checked');
}