Javascript单选按钮适用于FF和Chrome,但不适用于IE

时间:2012-03-24 22:29:03

标签: javascript jquery internet-explorer google-chrome radio-button

我必须验证是否检查了radiobox。

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 个答案:

答案 0 :(得分:2)

鉴于您正在使用jQuery,您可以这样做:

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

也就是说,查找所有已检查的名称的单选按钮,如果生成的jQuery对象的长度为0,则不会检查任何按钮。

简单演示:http://jsfiddle.net/WKKby/

你没有显示很多你的html,但是从你的JS看来,单选按钮位于一个id为“radiobutton”的元素中,所以你可能希望将它包含在你的jQuery选择器中:

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

答案 1 :(得分: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 
对于in循环来说,

通常会导致javascript imo出现问题,使用jquery各自的帮助器或者执行常规for循环,就像上面的例子中一样。