2010-07-11 4 views
2

В настоящее время я используюлучший способ проверить, установлен ли флажок?

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; 

но его такой длинный путь, чтобы написать ее.

есть ли лучший способ написать это?

ответ

10

Попробуйте это:

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

Или еще короче:

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

Вы проходящее в :checked селектор в .is() метод JQuery, который возвращает логическое значение;

+0

блестящий :) работает отлично, а одна строка – Hailwood

5

Вы можете использовать .length, как это:

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

.length длина массива соответствующих элементов ... если он не установлен, то это 0. А так как .length == 0 служит для .length == false в JavaScript вы можете сделать короткую версию сверху. Если вы потребность истина/ложь, то просто сделать .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; 
+0

собиралась ответить на ваш оригинальный комментарий. : o) Согласился с '[0] .checked' и собирался сказать, что если вы собираетесь избавиться от jQuery, возможно, все пройдет. Приятно видеть, что вы включили его в свой ответ. : o) – user113716

+0

@patrick - Извините, что конвертировал его здесь ... комментарии иногда не дают достаточно форматирования, если только нам разрешали новые строки ... хотя я вижу, как это будет быстро злоупотреблять. –

+0

Ник - Не проблема. Это была хорошая идея, которая здесь принадлежит. : o) – user113716

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'); 
} 
Смежные вопросы