Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Javascript - jak walidować input radio
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
tomaszs2
Witam,

Wszędzie w Internecie jest napisane tak jak tutaj:
http://www.felgall.com/javatip2.htm

że walidacja czy któryś z radio buttonów jest wybrany polega na iterowaniu po nich. Jednak to nie jest do końca prawda. Bo jeżeli jest tylko jeden radio button, to walidacja ta nie działa. Sprawdzałem to w Firefoxie 2 i w Internet Explorer 6.0. W momencie kiedy jest jeden radio button nie powstaje kolekcja.

Reasumując, mam:
Kod
   <input type='radio' name='sklep' value='2'>
    <input type='radio' name='sklep' value='3'>


Wtedy kod java script:

Kod
   wybrany_sklep= -1;
    for (i=formularz.wybrany_sklep.length-1; i > -1; i--) {
        if (formularz.wybrany_sklep[i].checked) {
        wybrany_sklep = i; i = -1;
        }
    }


przy założeniu że wybrano radio o value równym 2 zwróci 2. Czyli wszystko OK.

Ale..

Jeżeli w formularzu jest tylko jeden radio:

Kod
   <input type='radio' name='sklep' value='2'>


to przy założeniu, że go wybrano (czyli radio o value równym 2, to powyższy kod javascript zwraca co? -1!

Liczba tych radio buttonów jest u mnie losowa, raz to może być 5, raz 7 a czasem pojawia się tylko 1.
Dlatego chciałbym walidować JavaScriptem też ten przypadek kiedy pojawi się tylko jeden.

Jak na razie wiem, że jak jest jeden radio button i sprawdzam:

Kod
   alert(formularz.wybrany_sklep.checked)to zwraca mi ładnie true, jak wybiorę tego jednego radiobuttona.



W związku z tym mam prośbę. Czy moglibyście napisać jak rozszerzyć powyższy kod JavaScript, żeby elegancko walidował wariant kiedy jest jeden albo wiele radiobuttonów?

EDIT: poprawione zgodnie z uwagą webdicepl

webdice
Proszę uzupełnić post o brakujące znaczniki bbcode.
lord_t
Kod
wybrany_sklep= -1;
//dla jednego
if(document.formularz.sklep.constructor!=Array)
  {
  if(document.formularz.sklep.checked) wybrany_sklep=0;
  }
else //dla wielu
  for(i=document.formularz.sklep.length-1; i > -1; i--) {
    if (document.formularz.sklep[i].checked) {
       wybrany_sklep = i; i = -1;
       }
    }


Testowane dla takiego formularza:
  1. <form name='formularz'>
  2. <input type='radio' name='sklep' value='2'>
  3. </form>
tomaszs2
Dziękuję
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.