23. marts 2000 - 13:31Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<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>
<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?</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>
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; } }
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>
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!
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?)
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.
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>
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 :-))
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>
--> 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...
Synes godt om
Ny brugerNybegynder
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.