Avatar billede haolan Nybegynder
01. maj 2007 - 19:58 Der er 27 kommentarer og
1 løsning

Comboboks afhængigheder hvordan?

Hvordan laver man ting afhængige af hinanden?

Fx

Jeg har to combobokse..

Den ene indeholder nogle forskellige former for sport (løb, svømning osv.)

Den anden indeholder fx underlag (græs, grus, asfalt osv.)
Vælger man fx svømning skal underlag skjules som mulighed.

Data fra mine combobokse får jeg ind fra en mySQL database via PHP

-------------------------
Et andet problem:

Jeg har nogle datoer der skal afvælges via combobokse, som min følgene kode viser:

        echo "<select name='day' class='dateoption'>";

        for($i = 1; $i < 32; $i++) {
          $checked = ($i == date("d", $pas['dato'])) ? " selected" : "";
          echo "<option value=".$i.$checked.">".$i."</option>";
        }
        echo "</select>";

        echo " / <select name='month' class='dateoption'>";
        for($i = 1; $i < 13; $i++) {
          $checked = ($i == date("m", $pas['dato'])) ? " selected" : "";
          echo "<option value=".$i.$checked.">".$month[$i]."</option>";
        }
        echo "</select>";

        echo " - <select name='year' class='dateoption'>";
        for($i = 2006; $i < 2012; $i++) {
          $checked = ($i == date("Y", $pas['dato'])) ? " selected" : "";
          echo "<option value=".$i.$checked.">".$i."</option>";
        }
        echo "</select>";

Det skal gerne være sådan at man ikke kan vælge forkerte datoer.. Fx 31. februar og sådan.. Altså i comboboksen der afvælger man en måned og så i den anden comboboks får man slet ikke mulighed for at afvælge de dage der ikke eksisterer i den valgte måned..
Avatar billede roenving Novice
02. maj 2007 - 13:05 #1
1. Sæt en onchange på den første select, der skjuler, hvis der vælges svømning:

<select name="sportsgrene" onchange="document.getElementById('underlag').style.display=this.selectedIndex==2?'none':'inline';">

2. Det giver yderligere problemer med 29. februar, men kan selvfølgelig laves onchange, jeg vil bare mene det er at bruge kanoner mod fugle !-)
Avatar billede haolan Nybegynder
02. maj 2007 - 17:59 #2
skal den select der af underlag ikke bare have name=underlag for at den burde virke?
Avatar billede roenving Novice
02. maj 2007 - 23:17 #3
Hvis du bruger id, som i eksemplet skal den _også_ have id="underlag" !-)
Avatar billede haolan Nybegynder
03. maj 2007 - 08:54 #4
Hmm kan stadig ikke få det til at virke..

Min kode ser sådan ud:

echo "<select name='type' onchange='document.getElementById('underlag').style.display=this.selectedIndex==2?'none':'inline';'>";

...

echo "<select name='underlag'id='underlag'>";
Avatar billede mclemens Nybegynder
03. maj 2007 - 11:31 #5
- Du skal escape Roenvings ", og ikke rette dem til '.
... Javascript strengen indvendig bruger ', hvis du
ønsker ' til attribut / event omslutning skal du skifte
Roenving '-er til "-er samtidig med at du skifter rundt.
... Og så selvfølgelig escape alle "-erne.

echo "<select name='type' onchange='document.getElementById(\"underlag\").style.display=this.selectedIndex==2?\"none\":\"inline\";'>";

... Husk også et mellemrum her:
echo "<select name='underlag'id='underlag'>";
-> echo "<select name='underlag' id='underlag'>";
Avatar billede haolan Nybegynder
03. maj 2007 - 18:52 #6
Havde så lige glemt at tænke på at der udfor select boksen stadig står: "Underlag:"
Kan man ikke fjerne det i samme forbindelse..

Jeg har det liggende i en table, så kan man ikke fjerne hele den <tr> som underlag står i evt?
Avatar billede haolan Nybegynder
03. maj 2007 - 18:53 #7
Ellers derudover virker det fint nu :)
Avatar billede haolan Nybegynder
03. maj 2007 - 19:58 #8
Fandt selv ud af det :)

Er det meningen du vil bruge samme metode til måneder roenving?
Avatar billede roenving Novice
04. maj 2007 - 06:23 #9
¡Muy bueno!

-- dag-måned-år-tingen er ganske meget mere kompliceret, f.eks. indkorporerer den, at man evt. kommer til at lave om på valg brugeren har foretaget ...

-- og så vil den medføre ulogiske valg, da en naturlig ting ville være, at man lavede en default-værdi, hvorfor det som udgangspunkt f.eks. ikke ville være muligt i februar at finde 31. oktober (medmindre man valgte måned først !-)
Avatar billede haolan Nybegynder
04. maj 2007 - 17:45 #10
Kan jeg godt se du har ret i :)

Smid et svar for points..
Avatar billede roenving Novice
05. maj 2007 - 04:59 #11
Velbekomme '-)
Avatar billede roenving Novice
05. maj 2007 - 15:21 #12
-- og tak for point ;~}
Avatar billede haolan Nybegynder
05. maj 2007 - 18:09 #13
velbekomme...


Der er et lille problem i Firefox jeg lige har opdaget... Jeg flyttede ID fra selection boksen til <tr> for at skjule hele feltet.. Men når man vælger et andet punkt i boksen skupper den underlagsboksen ind så det ligner at de ligger i en <td> helt for sig selv.. :S i Internet Explorer er der ingen problemer..

har lavet et screenshot her:

http://ole.vivaa.dk/scrshot.PNG
Avatar billede haolan Nybegynder
05. maj 2007 - 18:10 #14
ved du hvordan jeg for klaret dette?
Avatar billede roenving Novice
06. maj 2007 - 05:28 #15
-- ja, du skal for andre browsere end IE vise en tabelrække med display:table-row; (i IE kan du bruge display:block; inline har jeg ikke prøvet !-)
Avatar billede haolan Nybegynder
06. maj 2007 - 16:06 #16
Hvordan får jeg så klaret, så den gør den ene i FF og det andet i IE?
Avatar billede roenving Novice
07. maj 2007 - 13:10 #17
Du sætter en IE-variabel, og bruger den til at teste:

var uA = navigator.userAgent.toLowerCase();
var trDisplay = (ua.indexOf("msie")>0 && ua.indexOf("opera") == -1) "block" : "table-row";

-- og så bruger du den til at vise med:

echo "<select name='type' onchange='document.getElementById(\"underlag\").style.display=this.selectedIndex==2?\"none\":trDisplay;'>";

-- jeg kender i IE7s forhold til dette, så måske skal der også checkes for om udgaven er mindre end 7 !-)
Avatar billede roenving Novice
07. maj 2007 - 14:11 #18
... kender ikke IE7s ...
Avatar billede haolan Nybegynder
07. maj 2007 - 19:32 #19
hmm jeg har nu følgene funktion:

echo "<script type='text/javascript'>";
echo "function hideSelections(thiselm) {
    var uA = navigator.userAgent.toLowerCase();
    var trDisplay = (ua.indexOf(\"msie\")>0 && ua.indexOf(\"opera\") == -1) \"block\" : \"table-row\";
    document.getElementById(\"underlag\").style.display=thiselm.selectedIndex==4?\"none\":\"inline\";
    document.getElementById(\"distance\").style.display=thiselm.selectedIndex==2||thiselm.selectedIndex==1?\"none\":\"trDisplay\";
}";

I FF reagere funktionen slet ikke og i IE kommer der en fejlmeddelse om at et objekt var ventet..
Avatar billede mclemens Nybegynder
07. maj 2007 - 19:37 #20
uA og ua er ikke det samme.
Avatar billede haolan Nybegynder
07. maj 2007 - 19:40 #21
har rettet funktionen med det der uA.. Men stadig med samme problem..
Avatar billede mclemens Nybegynder
07. maj 2007 - 19:43 #22
\"trDisplay\" skal være trDisplay - for at bruge variablen istedet for en tekststreng.
... Men kigger lige videre.
Avatar billede mclemens Nybegynder
07. maj 2007 - 19:51 #23
Hmm, der bruges document.getElementById("distance") og
document.getElementById("underlag"), det er to forskellige
selects eller ? Og id er sat på de select ?

... men ellers mangler der også et ? her:
var trDisplay = (ua.indexOf(\"msie\")>0 && ua.indexOf(\"opera\") == -1) \"block\" : \"table-row\";
->
var trDisplay = (ua.indexOf(\"msie\")>0 && ua.indexOf(\"opera\") == -1)?\"block\" : \"table-row\";
Avatar billede mclemens Nybegynder
07. maj 2007 - 20:00 #24
^ - Ignorer mit spørgsmål, jeg har gennemlæst nu ...
Med andre ord det som Roenving skrev skulle have været:

var ua = navigator.userAgent.toLowerCase();
var trDisplay = (ua.indexOf("msie")>0 && ua.indexOf("opera") == -1)?"block" : "table-row";
Avatar billede haolan Nybegynder
07. maj 2007 - 20:15 #25
smukt, det virker :)

jeg siger mange tak :)

Ved ikke helt hvordan pointfordelen skal være i den her situation..

Men går ud fra i begge bare skal have points.. så smid et svar..
Avatar billede haolan Nybegynder
07. maj 2007 - 20:16 #26
hov nej.. det var jo et besvaret spørgsmål.. jeg tåger lidt :P

takker for hjælpen til jer begge ihvertfald :)
Avatar billede mclemens Nybegynder
07. maj 2007 - 20:21 #27
Hehe, velbekom :) Og det var bare
to små tegn, så det er helt fint ;)
Avatar billede haolan Nybegynder
27. maj 2007 - 23:49 #28
Må man spørge hvordan jeg laver omvendt effekt?
har et element der kun skal være vist hvis 1 af elementerne fra type (med index 4) er valgt. Denne række skal også vises hvis siden loader med type index er 4 fra start.

Håber i forstår.

Skal nok oprette en ny tråd med beskrivelse, resultat og points bagefter, men var lige nemt at spørge jer her, nu vi havde gang i noget af det samme :)
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