2010-07-11 87 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選擇到jQuery的.is()方法,該方法返回一個布爾值;

+0

輝煌:)作品完美,單行 – Hailwood 2010-07-11 14:09:47

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; 
+0

即將回復您的原始評論。 :o)同意'[0] .checked',並且即將說如果你要拋出jQuery,那麼可能會一路走下去。很高興看到你將它列入你的答案。 :o) – user113716 2010-07-11 14:04:43

+0

@patrick - 對不起,在這裏進行了轉換......有時候評論並沒有提供足夠的格式,只要我們被允許使用新行......儘管我確實看到了它會如何快速被濫用。 – 2010-07-11 14:07:16

+0

尼克 - 不是問題。這裏屬於一個好主意。 :o) – user113716 2010-07-11 14:09:24

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'); 
} 
相關問題