Avatar billede mazey Praktikant
09. oktober 2008 - 20:02 Der er 18 kommentarer og
1 løsning

checkboxes reagerer på brugerhandlinger

Hej Eksperter.

Jeg har en form, hvori der i hver row er 5 checkboxes og 2 textfelter.
Lad os kalde checkboxene for hhv. ch1, ch2, ch3, ch4 og ch5.
De 2 textboxe kalder vi for tx1 og tx2.

Nu er jeg ikke så ferm til Javascript, men jeg vil mene at det er muligt at påvirke enkelte checkboxes og textfelter udfra andre checkboxes.

Hvis f.eks. at ch1 vinges af, skal ch3 også automatisk vinges af.
Hvis værdien af tx1 er 2 og ch2 er vinget af, skal ch4 automatisk vinges af.

Er det noget der kan lade sig gøre?

Mange tak!
Avatar billede olebole Juniormester
09. oktober 2008 - 20:22 #1
<ole>

- og alle de andre regler ... hvordan ser de ud? Hvad skal der ske med de andre checkboxe - og hvad skal der ske, hvis noget tekst bliver slettet i et felt - og hvad skal der ske, hvis brugeren selv fjerner et flueben?

Det lyder, somom der er en masse, som ikke er tænkt igennem ... i hvertfald hører vi ikke noget om tankerne  =)

/mvh
</bole>
Avatar billede olebole Juniormester
09. oktober 2008 - 20:23 #2
- og hvad skal ske, hvis brugeren selv afvinker en checkbox udenom automatikken?
Avatar billede majbom Novice
09. oktober 2008 - 20:27 #3
<input type="checkbox" id="ch1" onchange="document.getElementById('ch3').checked = this.checked">
<input type="checkbox" id="ch2" onchange="if(document.getElementById('tx1').value==2 && document.getElementById('ch2').checked==true){document.getElementById('ch4').checked=true}else{document.getElementById('ch4').checked=false}">
<input type="text" id="tx1" onchange="if(this.value==2 && document.getElementById('ch2').checked==true){document.getElementById('ch4').checked=true}else{document.getElementById('ch4').checked=false}">

utestet...
Avatar billede mazey Praktikant
09. oktober 2008 - 20:59 #4
olebole - Det skal siges at jeg ikke ville udfolde hele viften, hvis jeg med det samme fik at vide at det ikke kunne lade sig gøre... :)

Som det er bygget op, er der som sagt 5 checkboxe og 2 textfelter i hver række.
Disse rækker er der 18 stk af, hvilket jo må siges at være en del checkboxe og tekstfelter, men det er i en god mening, idet det er til et statistiksystem.

Javascript koden skal derfor indgå til alle 18 rækker, men jeg er (næsten) overbevist om at kan jeg få hjælp til at lave den første række, er resten ikke så svært.

Nå, til selve inputboksene... ALLE boxe er aktive, dog er der, som beskrevet tidligere, enkelte boxe som skal udføre handlinger for andre boxe. Bortset fra en checkbox, skal alle de automatiskudfyldte checkboxe kunne vinges fra igen.

Helt enkelt skal det enkelte linie være således:

Hvis tx1 = 2 og ch2 er vinget af skal tx2 være = 1
Hvis ch5 er vinget af skal ch4 også vinges af (ch4 skal være vinget af hvis ch5 er vinget af.)

Noget af en lang smøre - og ja, den kunne jeg have startet med... :D
Avatar billede mazey Praktikant
09. oktober 2008 - 21:06 #5
forsøger lige med det du skriver splazz...
Avatar billede majbom Novice
09. oktober 2008 - 21:17 #6
okay, hopper i seng... :)
Avatar billede mazey Praktikant
09. oktober 2008 - 21:20 #7
Det virker udemærket...

id="gir<?=$x?>" onchange="if(document.getElementById('hul<?=$x?>').value==<?=$henthul2[par] - 1?> && document.getElementById('gir<?=$x?>').checked==true){document.getElementById('putt<?=$x?>').value=1}else{document.getElementById('putt<?=$x?>').value=''}"

Ovenstående virker fint, men kan man kode det sådan at den skriver værdien i den tekstboks, så snart man har vinget flubenet af, istedet for at man skal klikke i tekstfeltet før den skriver?


bare lidt urolig for, at med al den onchange kode der skal være, at det sløver siden...
Avatar billede olebole Juniormester
09. oktober 2008 - 21:49 #8
onchange event'en fyres kun af i det øjeblik, et felt forlades og værdien er ændret. Det sløver ikke noget  =)
Avatar billede mazey Praktikant
09. oktober 2008 - 21:53 #9
Ok... jeg troede bare at jo mere kode browseren skulle cykle igennem, desto langsommere blev det... og ved tanken om ovenstående kode til 3 af boksene gange de 18 repititioner = rigtig meget kode == langsomt site...
Avatar billede olebole Juniormester
09. oktober 2008 - 22:25 #10
Det er _yderst_ fornuftigt at tænke i de baner, men en event skal altid udløses, før den begynder at 'æde' af resourcerne, så lige dér er der ingen grund til frygt  =)
Avatar billede majbom Novice
10. oktober 2008 - 08:20 #11
"Ovenstående virker fint, men kan man kode det sådan at den skriver værdien i den tekstboks, så snart man har vinget flubenet af, istedet for at man skal klikke i tekstfeltet før den skriver?"

ja, du kan jo bare lave en onchange-event på den checkbox der så sætter tx1.value='2'
Avatar billede roenving Novice
10. oktober 2008 - 15:28 #12
Hvad med at lave det i rækker i hver sin omkransende boks, så kan du bruge den samme kode til alle linjer ...

-- men så skal vi også have en ide om, hvordan du navngiver hele vejen igennem, for alle checkboksene hedder vel ikke hhv. ch1, ch2 osv. !-)
Avatar billede mazey Praktikant
10. oktober 2008 - 19:14 #13
Hej roenving...
Det lyder meget interessant det du foreslår... :)
Måden det er opbygget på er som beskrevet tidligere med 2 tekstfelter og 5 checkboxe.
Disse bliver så hevet igennem i php løkke, hvor de bliver duplikeret 18 gange.
Faktisk hedder de forskellige bokse nogenlunde det samme.
F.eks. hedder den ene checkbox <input type="checkbox" name="gir<?=$x?>" id="gir<?=$x?>">
denne kører så igennem løkken hvor det bliver til: <input type="checkbox" name="gir1" id="gir1"> ... <input type="checkbox" name="gir18" id="gir18">
Avatar billede roenving Novice
11. oktober 2008 - 11:32 #14
Hvad hedder de andre i samme linje så ?-)
Avatar billede mazey Praktikant
11. oktober 2008 - 13:55 #15
De hedder:
<input name="hul<?=$x?>" type="text" class="bundtxt" size="2" maxlength="2" value="<?=$_POST[hul.$x];?>">
<input name="fw<?=$x?>" <? if($_POST[fw.$x] == 1){echo "checked"; }?> type="checkbox" value="1" />
<input name="p<?=$x?>" value="<?=$_POST[p.$x];?>" type="text" class="bundtxt" size="2" maxlength="2" />
<input name="updown<?=$xx?>" type="checkbox" class="bundtxt" value="1" <? if($_POST[gir.$xx] == 1){echo "checked"; }?> />
<input name="bun<?=$xx?>" type="checkbox" class="bundtxt" value="1" <? if($_POST[bun.$xx] == 1){echo "checked"; }?> />
<input name="sand<?=$xx?>" type="checkbox" class="bundtxt" value="1" <? if($_POST[gir.$xx] == 1){echo "checked"; }?> />
Avatar billede mazey Praktikant
11. oktober 2008 - 13:55 #16
$x og $xx er to løkker som gør det samme...
Avatar billede mazey Praktikant
12. oktober 2008 - 18:13 #17
Efter at have leget lidt med Splazz' kode, er det lykkes mig at få det til at virke efter hensigten.
Problemet er derfor løst og der skal afleveres point.
Tingene skal jo gøres rigtigt, og jeg skal give point til Splazz, men jeg valgte at benytte den kode på baggrund af oleboles information om hastighed af sitet ved brug af events.

Men point skal der gives...

Mange gange tak for hjælpen.
Avatar billede majbom Novice
12. oktober 2008 - 19:39 #18
jeg forstod ikke rigtig hvad du skrev, men nu smider jeg et svar, så kan du give point hvis jeg skal have :)

og selv tak
Avatar billede majbom Novice
21. oktober 2008 - 08:52 #19
tak for points :0)
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