Avatar billede verakso Nybegynder
23. marts 2000 - 13:31 Der er 14 kommentarer og
1 løsning

Problem med radio buttons

Hejsa,

Jeg har et lille script der tjecker for, om en bruger har sat prik i en gruppe radio buttons eller ej.
Scriptet ser ud som følger:

function CheckDate(form) {
  for (i=0; i<form.StartDate.length; i++) {
    if (form.StartDate[i].checked) {
      return true;
    }
  }
  alert("You must specify a date!");
  return false;
}

Mit problem er, at siden hvor scriptet bliver brugt er dynamisk, og jeg ved ikke altid hvor mange radio buttons der vil være. Scriptet virker også fint, med mindre der kun er een radio button, så fejler det.

Jeg kan ikke få hul på denne nød, men hvis der er nogle der evt. ville kunne hjælpe mig med at tilrette scriptet så det også virker med kun en radio button, er der point at hente.

/Verakso
Avatar billede olebole Juniormester
23. marts 2000 - 14:40 #1
<ole>
Det spørgsmål har været oppe masser af gange. Prøv at trykke søg i den blå menubar foroven, og søg på 'radiobutton' under 'JavaScript' og/eller 'HTML/DHTML'.
/VH
</bole>
Avatar billede verakso Nybegynder
23. marts 2000 - 15:04 #2
Nu har jeg søgt på radiobutton i alle kategorier, og der var ikke svar på mit spørgsmål, som måske ikke er penslet nok ud.

Hvordan checker jeg om en radio button er slået til eller ej, hvis der kun er een radio button.

Functionen i mit oprindelige indlæg virker fint, men kun hvis der er mere end een radio button.

Sorry men ingen point i denne omgang

/Verakso
Avatar billede olebole Juniormester
24. marts 2000 - 02:25 #3
<ole>
Det ved jeg da ikke. I
http://www.eksperten.dk/spm.asp?id=11360
giver jeg ellers et udmærket svar - som godt nok blev afvist, fordi han fandt en anden løsning - der vil kunne løse dit problem. Prøv at se dette eksempel:

<html>
<head>

<script language="JavaScript"><!--
var check = 0;
function checkRadio() {
    alert(check);
}
// -->
</script>

</head>
<body>

<form>
<input type=radio name=min onclick="check=1;"> nummer et<br>
<input type=radio name=min onclick="check=2;"> nummer to<br>
<input type=radio name=min onclick="check=3;"> nummer tre<br>
</form>
<a href=java script:checkRadio();>Hvilken 'radio' er valgt&#63;</a>

</body>
</html>

Det må du kunne bruge til noget.
Du opretter altså en variabel for hver radio-gruppe i din form og sætter den til '0'. Derefter tildeler du den en værdi på 'onclick'. Du kan så se, om der er valgt en - og hvilken radio, der er valgt.
/VH
</bole>
Avatar billede verakso Nybegynder
24. marts 2000 - 08:33 #4
Hej Ole,

Tak for din standhaftighed, men det hjælper mig satdigt ikke helt, så derfor...

Jeg har selv kigget på http://www.eksperten.dk/spm.asp?id=8646, og måsker er der noget inspiration at hente her

Funktionen som du har vist virker godt nok med een radio button, men det hjælper ikke mig i mit konkrete tilfælde, da den forudsætter at man itererer igennem check-værdierne.

Dit svar er dog ikke helt afskrevet, på trods af jeg havde forestillet mig noget mere i retning af..

function VerifyOne(group) {
var i;
  if (group[0].checked) {
    return true;
  } else {
  for (i=0;i<group.length;i++)
    if (group[i].checked) return true;
  return false;
  }
}

Jeg har bare ikke lige haft tid til at teste det
Avatar billede helle_fred Nybegynder
24. marts 2000 - 11:19 #5
Dit problem skyldes, at når der kun er et enkelt element i et Radio-objekt, så er length af dets array 'undefined'. Til gengæld kan man teste om denne ene knap er afkrydset ved at teste direkte på objetets checked.værdi.

Her er et forslag (jeg bruger ikke din form som parameter, men derimod selve Radio-objektet):

function CheckDate(StartDate) {   
    if(StartDate.checked) return true
    for (i=0; i<StartDate.length; i++)
    if (StartDate[i].checked)  return true
    alert("specify a date"); return false
    }
</script>

venlig hilsen
Helle
Avatar billede verakso Nybegynder
24. marts 2000 - 14:37 #6
Smukt!,

Det er lige det der skulle til.
Du har fuldstændig ret i at objectet ikke er initialiseret når der kun er eet punkt i radio array'et.
(Nu har array aldrig været min stærke side.)

Send det lige som et svar og du skal få dine point!

/Verakso
Avatar billede helle_fred Nybegynder
27. marts 2000 - 08:51 #7
ok - her er et svar, så bare hit med guldet!

Iøvrigt synes jeg det er meget ulogisk, at der ikke oprettes et array for radio-objektet, når der kun er en knap. Ok, radioobjektet har selvfølgelig mest sin berettigelse, når der er flere - men det samme gør sig også gældende for check boxes, hvor man sagtens kan tænke sig, at der kun er en enkelt. JavaScript er ikke særlig pænt, når man kommer lidt i dybden med det.

Jeg har også altid manglet en måde at tjekke om et objekt er udefineret. Det burde være muligt at lave et tjek i retning af:

if(xobjekt==undefined)....

Den mulighed mangler man i JavaScript (eller er det bare mig, der ikke kender trickset?)

vh Helle

Avatar billede stoffer Nybegynder
15. juni 2000 - 12:11 #8
Hej OLEBOLE

det var en smart måde du bruger. Jeg bruger nu også den metode. Taksi.

Jeg har flere radiobuttons grupper.

pt. bruger jeg:

gruppe1check = 0
gruppe2check = 0
gruppe3check = 0

<form>
<input type=radio name=gruppe1 onclick="gruppe1check =1;"> nummer et<br>
<input type=radio name=gruppe1 onclick="gruppe1check =2;"> nummer to<br>
<input type=radio name=gruppe1 onclick="gruppe1check =3;"> nummer tre<br>

<input type=radio name=gruppe2 onclick="gruppe2check =1;"> nummer et<br>
<input type=radio name=gruppe2 onclick="gruppe2check =2;"> nummer to<br>
<input type=radio name=gruppe2 onclick="gruppe2check =3;"> nummer tre<br>

<input type=radio name=gruppe3 onclick="gruppe3check =1;"> nummer et<br>
<input type=radio name=gruppe3 onclick="gruppe3check =2;"> nummer to<br>
<input type=radio name=gruppe3 onclick="gruppe3check =3;"> nummer tre<br>

</form>


menmenmen kunne man ikke lave en global funktion, så man ikke behøver at definere en ny variable for hver gruppe. Kan du følge mig?

hvis du kan løse det opretter jeg et lille taknemmelighedspg. til dig ;)
Avatar billede olebole Juniormester
15. juni 2000 - 15:08 #9
Det skulle jeg da mene - har lige småtravlt nu...datteren og jeg skal vist lige have et ÆselSpil (kortspil med lokkende udsigter til at gøre Far til æsel!)  :-))
Kikker på det lidt senere.
Avatar billede stoffer Nybegynder
15. juni 2000 - 15:10 #10
oki ;)
Avatar billede olebole Juniormester
17. juni 2000 - 16:12 #11
Tjahh...det lod sig gøre, meeen! Det er vel ikke så fikst, men måske det kan være inspiration til en mere 'sexy' version:

<html>
<head>
<script language="JavaScript">
<!--
// Opret et array bestående af objekter svarende til radio-grupperne **********************
var myGroups = new Array();
var test = "";
function makeGroups() {
    which = document.forms[0];
    for (i=0; i<which.elements.length; i++) {
        if (which.elements[i].type == "radio" && which.elements[i].name != test) {
            whichGr = parseInt(myGroups.length);
            myGroups[whichGr] = new group(myGroups[whichGr]);
            myGroups[whichGr].name = which.elements[i].name;
            test = which.elements[i].name;
        }
    }
}
function group(what) {
    this.name = "";
    this.check = "no value";
    return this;
}
// Sæt denne gruppes 'check' værdi **********************
function setCheck(inx,gr) {
    myGroups[gr-1].check = inx;
}
// Et eksempel på brugen af objekternes aflæsning. En anden forms felter sættes **********************
function readValues() {
    form2 = document.forms[1];
    for (i=0; i<myGroups.length; i++) {
        form2.elements[i].value = myGroups[i].name+" = "+myGroups[i].check;
    }
}
//-->
</script>
</head>
<body bgcolor=white onload=makeGroups();>

<form>
<input type=radio name=gruppe1 onclick="setCheck(1,1);"> nummer et<br>
<input type=radio name=gruppe1 onclick="setCheck(2,1);"> nummer to<br>
<input type=radio name=gruppe1 onclick="setCheck(3,1);"> nummer tre<br><br>
<input type=radio name=gruppe2 onclick="setCheck(1,2);"> nummer et<br>
<input type=radio name=gruppe2 onclick="setCheck(2,2);"> nummer to<br>
<input type=radio name=gruppe2 onclick="setCheck(3,2);"> nummer tre<br><br>
<input type=radio name=gruppe3 onclick="setCheck(1,3);"> nummer et<br>
<input type=radio name=gruppe3 onclick="setCheck(2,3);"> nummer to<br>
<input type=radio name=gruppe3 onclick="setCheck(3,3);"> nummer tre<br><br>
<input type=button onclick=readValues(); value=" Flyt... ">
</form>
<hr>
<form>
<input type=text name=gruppe1 size=40><br>
<input type=text name=gruppe2 size=40><br>
<input type=text name=gruppe3 size=40><br>
<input type=text name=gruppe4 size=40><br>
<input type=text name=gruppe5 size=40>
</form>

</body>
</html>

/Vh
ÆselDyret :-))
Avatar billede olebole Juniormester
17. juni 2000 - 16:18 #12
PS: Du kan oprette flere grupper og kalde dem, hvad du vil - bare du overholder formen på onclick-kaldet.
Endvidere må du ikke blande radios fra forskellige grupper sammen. Hver gruppe skal skrives sammen i 'klumper'...håber, det var forståeligt :-))
Avatar billede olebole Juniormester
17. juni 2000 - 19:35 #13
Nej, stoffer...jeg kan ikke holde tanken om det der WYSIWYG-editor-agtige script :-)
Hvad enten det drejer sig om noget database-udtræk eller det er skrevet 'i hånden' må du skrive variablerne og undgå at få alt det skrald ned gennem hullet. I stedet for - med store krumspring - at oprette variablerne på klienten, så gør det på serveren - eller på din PC.
Det her funker i hvert fald under MacOs, men jeg har ikke testet fo X-platform...prøv. Der er den lille finte, at variablerne hedder det samme som radio-grupperne. Der er forskel på, om man 'betragter' dem indefra formen eller udefra.
Indefra bliver et spørgsmål tolket som gående på input-gruppen - udefra på variablen...og det kan man bruge. Men jeg ved som sagt ikke på PC.

<html>
<head>
<script language="JavaScript">
<!--
var gruppe1,gruppe2,gruppe3;
// Sæt denne gruppes 'check' værdi **********************
function setCheck(inx,gr) {
    eval(gr+" = "+inx+";");
}
function tellMe() {
    alert(gruppe1+' - '+gruppe2+' - '+gruppe3);
}
//-->
</script>
</head>
<body bgcolor=white>

<form>
<input type=radio name=gruppe1 onclick="setCheck(1,this.name);"> nummer et<br>
<input type=radio name=gruppe1 onclick="setCheck(2,this.name);"> nummer to<br>
<input type=radio name=gruppe1 onclick="setCheck(3,this.name);"> nummer tre<br><br>
<input type=radio name=gruppe2 onclick="setCheck(1,this.name);"> nummer et<br>
<input type=radio name=gruppe2 onclick="setCheck(2,this.name);"> nummer to<br>
<input type=radio name=gruppe2 onclick="setCheck(3,this.name);"> nummer tre<br><br>
<input type=radio name=gruppe3 onclick="setCheck(1,this.name);"> nummer et<br>
<input type=radio name=gruppe3 onclick="setCheck(2,this.name);"> nummer to<br>
<input type=radio name=gruppe3 onclick="setCheck(3,this.name);"> nummer tre<br><br>
<input type=button onclick="alert(gruppe1+' - '+gruppe2+' - '+gruppe3);" value=" TEST /med script i formen ">
<input type=button onclick="tellMe();" value=" TEST /med remote script ">
</form>

</body>
</html>

/Vh
Avatar billede stoffer Nybegynder
19. juni 2000 - 09:48 #14
Det virker jo perfekt, både i IE og NS, mange tak. Nu har jeg noget at arbejde videre med :)

Her er lidt for dit arbejde........

http://www.eksperten.dk/spm.asp?id=19479

Avatar billede stoffer Nybegynder
19. juni 2000 - 10:53 #15
--> I stedet for - med store krumspring - at oprette variablerne på klienten, så gør det på serveren - eller på din PC.

det kunne man selvf. gøre med et loop, men jeg synes det er mere elegant at lave en global check funktion som du har gjort...


Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester