2012-04-23 134 views
0

我有JavaScript檢查文本字段和複選框罰款,但是當談到單選按鈕時,它無法區分是否選擇了其中一個選項。如何檢查是否選擇了單選按鈕之一?

如何正確執行此操作?

這是我有:

validateBugForm = function() 
{ 
    var name = document.forms["bug_form"]["Name"].value; 
    var email = document.forms["bug_form"]["Email"].value; 
    var tos = document.forms["bug_form"]["Accept"].checked; 
    var project = document.forms["bug_form"]["project"].value; 

    if (name == "") 
    { 
     alert("You must provide your name or nick name!"); 
     return false; 
    } 

    if (project == "") 
    { 
     alert("You must choose a project."); 
     return false; 
    } 

    if (email.indexOf ('@', 0) == -1 || email.indexOf ('.', 0) == -1) 
    { 
     alert("You must provide your email address!"); 
     return false; 
    } 

    if (!tos) 
    { 
     alert("You must agree to our Terms of Services."); 
     return false; 
    } 
} 

在我的表單中我有:

<tr> 
    <td width="30%">Choose a project in which you encountered a problem. 
    <big><font color="red">*</font></big></td></td> 
    <td width="10px" class="table_td_space"></td> 
    <td width="70%"> 
     <input type="radio" name="project" value="1" id="1">1<br> 
     <input type="radio" name="project" value="2" id="2">2<br> 
     <input type="radio" name="project" value="3" id="3">3<br> 
     <input type="radio" name="project" value="4" id="4">4<br> 
    </td> 
</tr> 

回答

6

你完成所有的單選按鈕選項需要循環,看看一個選擇:

var projectObj = document.form1.project 
var len = projectObj.length 
var chosen = null; 

for (i = 0; i <len; i++) { 
    if (projectObj[i].checked) { 
     chosen = projectObj[i].value 
    } 
} 

if (chosen == null) { 
    alert("No Radio Button Chosen") 
} 

http://homepage.ntlworld.com/kayseycarvey/jss3p11.html

+2

+1,但請聲明變量和存儲對象像[HTMLCollection](http://www.w3.org/TR/DOM-Level-2-HTML/html。 html#ID-75708506)由'document.form1.project'返回以提高效率(和更少的代碼)。 – RobG 2012-04-23 03:00:53

+0

輝煌。我已根據您的建議更新了答案。謝謝! – msigman 2012-04-23 03:02:26

+1

通過將'selected'初始化爲'null',您可以確定,如果它最後仍然是'null',則不會檢查任何按鈕。單選按鈕的值可以是「」(空字符串)。 – RobG 2012-04-23 04:00:37

1

只是一個筆記,我花了一個小時在這個問題上摸不着頭腦,因爲這個工作正常,除非你試圖驗證比這個無線電元素更多的表單。由於每個單選按鈕都是一個單獨的表單元素,並且您試圖遍歷表單中的所有元素(例如,名稱中包含「required_」的所有元素),所以這可能會導致剩下的驗證或導致它始終存在當你循環表單時,你最終會檢查每個單選按鈕作爲一個單獨的元素,因此出現「false」。我發現的方法是使用隱藏的表單域來保存所選單選按鈕的值,方法是在每個單選按鈕上放置一個onClick事件,以便在單擊時將其值傳輸到隱藏字段 - 並檢查是否存在值在那個隱藏的領域。並且不要將單選按鈕標記爲要檢查的元素。

1

你需要遍歷所有的單選按鈕選項,查看是否被選中,但是當你拿着「projectObj」你有叫「值」的方法...

var projectObj = document.form1.project.value; 
var len = projectObj.length; 
var chosen = null; 

for (i = 0; i <len; i++) { 
    if (projectObj[i].checked) { 
     chosen = projectObj[i].value; 
    } 
} 

if (chosen == null) {enter code here 
    alert("No Radio Button Chosen"); 
} 

然後它會取值其他它只是返回無線電對象列表

相關問題