Avatar billede googolplex Novice
07. november 2004 - 21:50 Der er 16 kommentarer og
1 løsning

Gruppering og disabling af form-felter

Jeg har en formular med 100+ felter der skal udfyldes. Formularen er opbygget således at der er ca. 20 af disse selects:

<select name="name1">
    <option value"nej">Nej</option>
    <option value="ja">Ja</option>
</select>

Hver <select> har har 0-20 andre felter tilknyttet (text, checkboxes, mv), som skal være disabled="disabled" ved NEJ, men aktiveret ved JA.

Hvordan gør jeg dette ?
Avatar billede roenving Novice
09. november 2004 - 12:43 #1
Hvad med bare at skjule alle de felter, som ikke skal udfyldes (sæt dem i en div med display:none; og ændr det til 'block' !-)
Avatar billede googolplex Novice
09. november 2004 - 15:25 #2
Kan du ikke lige uddybe det ;-)

Her er et eksempel jeg har strikket sammen:

http://googolplex.dk/testform.php

Under hver kategori (fed skrift) er det Ja/Nej selecten, der skal aktivere de andre.
Avatar billede roenving Novice
09. november 2004 - 15:44 #3
F.eks.

<html>
<body>
<table>
<tr>
<td><b>MySQL database</b></td>
<td>
<select style="float:left;" onchange="document.getElementById('MySQLDiv').style.display=(this.selectedIndex==1)?'block':'none';">
    <option>Nej</option>
    <option>Ja</option>
</select>
<div id="MySQLDiv" style="float:left;display:none;width:300px;">
<input type="text" value="Antal"/><input type="text" value="Evt. version"/>
<div>
</td>
</body>
</html>
</tr>
</table>
Avatar billede roenving Novice
09. november 2004 - 15:45 #4
-- og det skal selvfølgelig være </div> !-)
Avatar billede roenving Novice
09. november 2004 - 15:46 #5
-- og du har forøvrigt et linjeskift før doctype i html-koden, det betyder efter mine oplysninger, at IE skider højt og flot på den !-)
Avatar billede googolplex Novice
10. november 2004 - 17:35 #6
Hvorfor får jeg ikke længere mails om nye besvarelser :-(

Den eneste grund til at kiggede på mit spørgsmål var, at du plejer at være mand for en fin tilbagemelding ;-)

Kigger lige på det Roenving :)
Avatar billede roenving Novice
10. november 2004 - 17:37 #7
-- har du måske hakket 'Send mig kun een email af' ?-)
Avatar billede googolplex Novice
10. november 2004 - 18:01 #8
Ok, har kigget på det, det funker ikke 100% efter planen :P

1. Som du kan se i testen virker det ikke helt. Så vidt jeg kan se bliver <div>'en sat til hidden ?
Det skulle desuden gerne virke således, at den skifter frem og tilbage mellem disabled og ikke-disabled alt efter om der står ja/nej i selecten.

2. Kan man lave det uden <div>, for lige netop i denne situation vil jeg helst undgå <div>'s. Eventuelt ved at bruge id's i selve form-felterne ?

Håber du kan hjælpe mig færdig :)
Avatar billede roenving Novice
11. november 2004 - 00:33 #9
Der er zq ikke mange begrænsninger i hvad man kan med javascript, men nogle er der selvfølgelig !-)

-- og jeg er grundlæggende en doven hund, så hvis jeg kan finde en vej, som gør det nemmere at kode (og gennemskue !-) så kigger jeg efter den ...

-- og det eksempel, jeg viste, skifter felterne mellem at være vist eller ikke være vist, hvilket alt andet lige giver samme resultat som disabled/enabled (at man kan skrive eller ikke skrive i felterne !-)

-- men det er adskilligt lettere at kode, for ellers skal man jo finde en metode til at gruppere felterne, for de skal adresseres hver især een ad gangen, hvis man skal ændre på en disabling ...

-- og der er faktisk en hammergod grund til at være doven på den måde, for der er ikke den fjerneste tvivl om, at jo simplere kodning, du kan lave, jo sværere bliver det at lave fejl, og jo lettere bliver det at gennemskue på et senere tidspunkt, hvor det skal laves om/tilpasses ...

1. Virker den kode, jeg har smidt ikke sådan, at der skiftes frem og tilbage mellem at blive vist og ikke vist ?-)

2. Under alle omstændigheder vil det være nemmere at smide de elementer, man skal ændre på inde i f.eks. en div (eller en hvilketsomhelst andet type element !-), specielt hvis man ikke kender antallet ...

-- en af de åbenbare uhensigtsmæssigheder ved det eksempel, jeg har lagt, er jo, at tabellen ændrer sig, men man kunne jo f.eks. også ændre på visibility i stedet for at ændre på display !o]
Avatar billede googolplex Novice
11. november 2004 - 01:26 #10
1. Nej, faktisk ikke, hvis der står 'nej' til at starte med, er den stadig vist som udgangspunkt.

2. Jeg sætter for det meste PHP til at generere JavaScript koden, så det er faktisk ligegyldigt om jeg kender antallet ;)

Hvad mener du med at ændre visibility ?

Er det meget besværligt at ændre på 'disabled', varierer det i forhold til form-felternes type ?
Avatar billede roenving Novice
11. november 2004 - 04:17 #11
1. wHa ?-)

<html>
<body>
<table>
<tr>
<td><b>MySQL database</b></td>
<td>
<select style="float:left;" onchange="document.getElementById('MySQLDiv').style.visibility=(this.selectedIndex==1)?'visible':'hidden';">
    <option>Nej</option>
    <option>Ja</option>
</select>
<div id="MySQLDiv" style="float:left;visibility:hidden;width:300px;">
<input type="text" value="Antal"/><input type="text" value="Evt. version"/>
</div>
</td>
</body>
</html>
</tr>
</table>
</body>
</html>

-- disabled fungerer normalt ganske udmærket, og der er, som skrevet, ikke principielt problemer i at benytte sig af disabled, så det kan sagtens gøres, men jeg er som sagt doven, og selv php kan ikke ændre på, at du er nødt til at kode dig til alle elementer !-)
Avatar billede roenving Novice
11. november 2004 - 04:19 #12
Hrm, kan være jeg er blevet lidt bel-øjet, for der optræder jo nogle body- og html-lukketags på utidige steder ...
Avatar billede googolplex Novice
11. november 2004 - 19:00 #13
Det virker ok, jeg forstår dog ikke forskellen på den kode og den første (block vs. visibility). Kan du give mig et eksempel på hvordan man ville gøre i forhold til disabled ? Mit problem er nemlig, at jeg helst ikke vil have at formularen ændrer 'form'. Kan man alternativt sætte id på en tr/td eller er det kun korrekt at sætte id på en div ?
Avatar billede roenving Novice
12. november 2004 - 01:42 #14
id kan sættes på _alle_ html-elementer !-)

Visibility ændrer om et element aktuelt renderes synligt eller om det ikke renderes synligt, men stadig optager pladsen ...

Display bestemmer, om elementet i det hele taget medtages i beregningen af dokumentets visning ...

En meget simpel kodestump viser forskellen:

<hr>
<form>
Her starter formen<br>
<span style="display:none;">Her er et skjult felt: <input><br> </span>
<input type="submit">
</form>
<hr>
<form>
Her starter formen<br>
<span style="visibility:hidden;">Her er et skjult felt: <input><br> </span>
<input type="submit">
</form>
<hr>

-- som det tydelig ses, hvis du ser det i en browser, er pladsen alligevel afsat med visibility, og du undgår derfor, at 'formen' i opsætningen ændres, hvis man ændrer den til visible, mens der er ret tydelige forskelle, hvis display ændres (her til display:inline; da en span er et inline-element !-)

Skal man lave en 'generisk' løsning med at disable felter, skal man lave et javascript, som finder alle aktuelle felter f.eks. indenfor samme række og så reagerer på dem ...

Et eksempel på en sådan scripting, kan du se her: http://www.eksperten.dk/spm/555262

-- og måske kan dette også inspirere: http://www.eksperten.dk/spm/554615 ...
Avatar billede googolplex Novice
12. november 2004 - 17:23 #15
Du ligger bare et svar roenving :-)
Avatar billede roenving Novice
13. november 2004 - 15:45 #16
Velbekomme '-)
Avatar billede roenving Novice
13. november 2004 - 17:08 #17
-- og tak for point ;~}
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