0

我必須驗證是否檢查了radiobox。Javascript radiobutton在FF和Chrome中工作,但不在IE中

HTML

<input style="width:20px;" id="radio1" type="radio" name="benvoor" class="benvoor" value="Ik ben voor" /> <label for="radio1">Ik ben voor. </label><br /> 
<input style="width:20px;" id="radio2" type="radio" name="benvoor" class="benvoor" value="Ik ben tegen" /> <label for="radio2">Ik ben tegen.</label> 

的JavaScript/jQuery的

//Assume no radio checked first 
var benvoor = false; 
for (i in aanmeldform.benvoor) { 
    // Is the element checked? 
    if (aanmeldform.benvoor[i].checked) { 
     //Choice has been made 
     benvoor = true; 
     // Cancel the loop if the checked element is found 
     break; 
    } 
} 

// If no choice has been made, put it in the errorList 
if (!benvoor) errorList.push("benvoor"); 

// Cancel submit if errors are found 
if (errorList.length > 0) { 
    document.getElementById("errorMessage").innerHTML = "Graag uw keuze maken";  
    $("#radiobutton label").addClass("rood"); 
    $("html, body").animate({ 
     scrollTop: $(this).offset().top 
    }, 1000); 
    return false; 
}​ 

回答

2

假設你正在使用jQuery,你可以這樣做:

if ($(':radio[name="benvoor"]:checked').length === 0) { 
    // none are checked, do something 
} 

也就是說,找到的所有單選按鈕該名稱被檢查,如果生成的jQuery對象的長度爲0,則不檢查。

簡單的演示:http://jsfiddle.net/WKKby/

你沒有表現出很大的HTML的,但是從你的JS它看起來像單選按鈕id爲「單選按鈕」的元素裏面,所以你可能要包括在您的jQuery選擇:

if ($('#radiobutton :radio[name="benvoor"]:checked').length === 0) { 
1

如果您正在使用jQuery無論如何,可能與@nnnnnn答案去,但你的代碼中的jsfiddle略作修改:http://jsfiddle.net/p9bs3/5/

var benvoor = false; 
for (var i =0;i < aanmeldform.benvoor.length;i++) { 
    // Is the element checked? 
    if (aanmeldform.benvoor[i].checked) { 
     //Choice has been made 
     benvoor = true; 
     // Cancel the loop if the checked element is found 
     break; 
    } 
} 

看來,IE處理formcollections與普通數組不同。以下代碼在chrome和IE中生成兩個不同的結果。

<form id="frm"> 
    <input type="radio" name="rdio"> 
    <input type="radio" name="rdio"> 
</form> 

腳本:

var arr = [1,2]; 
for(i in arr){ 
    console.log(i);  
} 

console.log('-----'); 
for(i in frm.rdio){ 
    console.log(i);  
} 

0 
1 
----- 
0 
1 
length 
item 

IE

0 
1 
------------ 
rdio 
length 
item 
namedItem 
循環中的

通常會導致在javascript imo中出現問題,像jquery的每個一樣使用助手,或者像上面的示例中那樣執行常規for循環。

+0

+1。是的,從不使用'for..in'來迭代類似數組的對象(即具有'.length'屬性和數字索引的對象)。一個簡單的for循環或jQuery的$ .each()是要走的路(或['Array.forEach()'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ Array/forEach)如果你有一個實際的數組,而不僅僅是一個類似數組的對象)。 – nnnnnn 2012-03-24 23:49:21

相關問題