Javascript radiobutton работает в FF и Chrome, но не в IE - PullRequest
0 голосов
/ 25 марта 2012

Я должен подтвердить, если установлен флажок.

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 ]

2 голосов
/ 25 марта 2012

Учитывая, что вы используете jQuery, вы можете сделать это:

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

То есть найти все переключатели с этим именем, которые проверены, и если результирующий объект jQuery имеет длину 0тогда ни один не проверяется.

Простая демонстрация: http://jsfiddle.net/WKKby/

Вы не показываете большую часть своего HTML, но из вашего JS похоже, что переключатели находятся внутри элемента с идентификатором«radiobutton», так что вы можете включить его в селектор jQuery:

if ($('#radiobutton :radio[name="benvoor"]:checked').length === 0) {
1 голос
/ 25 марта 2012

Если вы все равно используете 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 обрабатывает коллекции форм, отличные от обычного массива. Следующий код выдает два разных результата в 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);    
}

Chrome

0
1
-----
0
1
length
item

IE

0 
1 
------------ 
rdio 
length 
item 
namedItem 

для циклов in часто приводят к проблемам в javascript imo, используйте помощники, такие как jquery's each, или выполняйте регулярные циклы for, как я делал в примере выше.

...