Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[js] javascript loopje - ziet eerste resultaat niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een formulier waarbij ik met javascript door het aantal radio buttons heen loop, gebeurt iets raars. Als er slechts 1 resultaat is (oftewel 1 radiobutton), ziet hij het resultaat niet. De waarde is dan undefined. Zijn er 2 radiobuttons of 10 radiobuttons, dan komt hij wel netjes met het resultaat 2 of 10.

code:
1
2
3
4
5
6
7
8
9
10
11
function formCheck() {
    var kleurObj = document.formulier.kleur
    var len = kleurObj.length
    var chosen = null;
    for (i = 0; i <len; i++) {
        if (kleurObj[i].checked) { 
            chosen = hoeveelheidkleurObj[i].id
            //en hier zou dan nog wat code komen
        }
    }
}


Dus als ik in mijn formulier maar 1 radiobutton heb, zoals

code:
1
<input type="radio" name="kleur" id="rood" value="rood">


dan is de variabele chosen undefined. Maar heb ik 2 of 10 van zulke radiobuttons, dan is de waarde wel netjes 2 of 10. De waarde van id is altijd netjes ingevuld. Ziet iemand misschien wat ik hier fout doe?

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Dat komt vanwege je manier van selecteren. Met document.formulier.kleur krijg je direct het element terug als er maar één is. Als er meerdere zijn, dan krijg je een nodeList terug.

Voeg maar eens een alert(kleurObj) toe, dan zie je het direct.

Gebruik deze code:

JavaScript:
1
2
3
4
5
6
7
var kleuren = document.getElementsByName("kleur")
var kleur = null
for (var i = 0; i < kleuren.length; i++) {
  if (kleuren[i].checked) {
    kleur = kleuren[i].id;
  }
}

Verwijderd

Topicstarter
Ha, bedankt! _/-\o_ Dat wist ik niet, weer wat geleerd.

[ Voor 7% gewijzigd door Verwijderd op 06-04-2013 17:35 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

getElementsByName is niet echt een ideale manier om elementen bij naam op te zoeken. Het is buggy in een aantal non-fossiele browsers, waaronder IE8. Je kunt dan net zo goed querySelectorAll gebruiken, die geeft meer controle, en werkt in elk geval goed in de browsers die em ondersteunen (IE8+ en FF4+ en alle andere)

日本!🎌