目前我正在使用
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;
但写它的方式还有很长的路要走。
有更好的方式来写这个吗?
答案 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');
}