2015-04-01 113 views
0

情況:我想創建一個簡單的代碼,用戶必須至少選擇一個擴展才能繼續。用戶應至少選擇一個或多個分機,否則將顯示一條提示消息。在HTML中至少選擇一個選項

問題:問題是,如果只有一個擴展可用於選擇,無論選擇與否,警告消息將顯示不允許註冊完成。

//Select atleast one extension 
var arrCheckboxes = document.checkForm.elements["product"]; 
    var checkCount = 0; 
    for (var i = 0; i < arrCheckboxes.length; i++) { 
     checkCount += (arrCheckboxes[i].checked) ? 1 : 0; 
    } 
    if (checkCount > 0){ 
     return true; 
    } else { 
     alert("Select at least one Extension."); 
     return false; 
    } 
+0

看着它,我沒有看到問題。您是否在調試器中逐步瞭解了它在哪些方面出現意想不到的情況? – CindyH 2015-04-01 03:29:43

+0

在變量初始化之後嘗試console.log(arrCheckboxes)並檢查捕獲了哪些元素。 – phobos2077 2015-04-01 03:30:20

+1

http://jsfiddle.net/chriscoyier/BPhZe/76/你可以根據你的警報事件修改​​它(如果我的問題是正確的) – sinanspd 2015-04-01 03:32:00

回答

0

它是從瀏覽器的最早期的傳統,如果有隻產品,然後的名字一個表單控件:

document.checkForm.elements["product"]; 

將參考返回到控制,而不是你似乎期望的收藏品。

arrCheckboxes.length 

回報不確定

i < arrCheckboxes.length 

是假的,因此循環從未進入:這些控件默認不那麼有長度財產。

爲了解決這個問題,使用querySelectorAll它總是返回一個集合:

var arrCheckboxes = document.checkForm.querySelectorAll('[name=product]'); 

支持在IE 8+和其他地方。一個更簡單的代碼版本(假設它在函數體中):

var arrCheckboxes = document.checkForm.querySelectorAll('[name=product]'); 

for (var i = 0; i < arrCheckboxes.length; i++) { 
    if (arrCheckboxes[i].checked) return true; 
} 
alert("Select at least one Extension."); 
return false; 
+0

非常感謝:DDDD我剛試過,它修復了我的問題!你真棒! – Cloudburst 2015-04-01 04:38:45

相關問題