Avatar billede bambino Nybegynder
17. september 2001 - 10:48 Der er 10 kommentarer og
1 løsning

Dynamiske afhængige dropdowns der \"husker\" den valgte status fra DB

Jeg har hentet dette udemærkede javascript af \"justincase\" på http://www.elvers.dk/eksperten/dropdown/ - og det virker perfekt bort set fra en lille ting.

Jeg har i ASP i en \"If sætning\" fået den første dropdown til at lade den valgte værdi fra databasen være \"SELECTED\" dynamisk. Men det ville jeg også gerne have den anden dropdown skulle kunnde gøre ud fra f.eks. en If-sætning, men jeg er ikke særlig god til javascript!

Det fungerer sådan at brugeren vælger et valg fra hver af de to dropdown og opretter en record i databasen, når vedkommende så skal opdatere denne skal dropdown \"naturligvis\" have de pågældende værdier selected.

Håber meget I kan hjælpe - på forhånd tak.

Her er koden:

*****************************************************

<html>
<head>
<title>test 2</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<script language=\"JavaScript\">

function category(name, id) {
  this.name = name;
  this.id = id;
}

var pagetype = new Array();

pagetype[1] = new Array();  //  Webpage
pagetype[1][0] = new category(\"\",0);

pagetype[2] = new Array();  //  Newsarticle
pagetype[2][0] = new category(\"\",0);

pagetype[3] = new Array();  //  Mainpage
pagetype[3][0] = new category(\"Where in the Main Menu?\",0);
pagetype[3][1] = new category(\"In the toparea\",17);
pagetype[3][2] = new category(\"In the bottomarea\",18);

pagetype[4] = new Array();  //  Subpage
pagetype[4][0] = new category(\"For which Main Page?\",0);
<%
Do   
Number = Number + 1
response.write \"pagetype[4][\" & Number & \"] = new category(\'\" & rsSubpages.Fields.Item(\"name\").Value & \"\',\" & rsSubpages.Fields.Item(\"id\").Value & \");\"
rsSubpages.MoveNext
Loop While Not rsSubpages.EOF
%>

pagetype[5] = new Array();  //  Indexpage
pagetype[5][0] = new category(\"\",0);

function optionselect() {
  var num = document.forms[0].pagetype.options.selectedIndex;
  if (num != 0) {
    document.forms[0].selection.length = pagetype[num].length;
    for (var i = 0;i < pagetype[num].length; i++) {
      document.forms[0].selection.options[i].text = pagetype[num][i].name;
    }
    document.forms[0].selection.options.selectedIndex = 0;
    document.forms[0].id.value = \"\";
  }
}
</script>
</head>
<body bgcolor=\"#FFFFFF\" onLoad=\"optionselect()\">
<form>
  <select name=\"pagetype\" onChange=\"optionselect()\">
<option value=\"\" >Which type of page do you wish to create?</option> 
    <%
While (NOT rsPagetypes.EOF)
%>
    <option value=\"<%=(rsPagetypes.Fields.Item(\"typename\").Value)%>\" <%if rsPagetypes.Fields.Item(\"typename\").Value = rsPage_detail.Fields.Item(\"pagetype\").Value then Response.Write(\"SELECTED\") : Response.Write(\"\")%>><%=(rsPagetypes.Fields.Item(\"name\").Value)%></option>
    <%
  rsPagetypes.MoveNext()
Wend
If (rsPagetypes.CursorType > 0) Then
  rsPagetypes.MoveFirst
Else
  rsPagetypes.Requery
End If
%>
  </select>
  <select name=\"selection\">
  </select>
</form>
</body>
</html>
Avatar billede olebole Juniormester
17. september 2001 - 12:48 #1
<ole>
Ikke helt forstået. Prøv at forklare dig en gang til  :)
/mvh
</bole>
Avatar billede bambino Nybegynder
17. september 2001 - 17:54 #2
Hej olebole.

Det jeg ønsker er at have en dropdown menu som skaber nogle nye valgmuligheder i den anden dropdown menu. Dette virker perfekt nu. Disse værdier skal lægges ind i en database, det sker også. Problemet opstår når en bruger f.eks. skal tilbage og opdatere recorden på en opdateringsside.

I øjeblikket er det kun den første dropdown der \"husker\" (fra databasen) hvad brugerne valgte sidst, det kan du se i denne sætning:

<option value=\"<%=(rsPagetypes.Fields.Item(\"typename\").Value)%>\" <%if rsPagetypes.Fields.Item(\"typename\").Value = rsPage_detail.Fields.Item(\"pagetype\").Value then Response.Write(\"SELECTED\") : Response.Write(\"\")%>><%=(rsPagetypes.Fields.Item(\"name\").Value)%></option>

Men den anden dropdown generes i js og jeg kan ikke finde ud af at lave noget lignende dette til den i js! På ren dansk skal den blot sige hvis et id fra detail-recordsættet er lig med et id fra valgmuligheds-recordsættet skal denne være \"selected\" (altså først) i dropdown-menuen.
Jeg skal bruge noget i js der svarer til denne if-sætning i ASP.

<option value=\"rsSubpages.Fields.Item(\"id\")%>\" < if rsSubpages.Fields.Item(\"id\") = rsPage_detail.Fields.Item(\"parentid\") then Response.Write(\"SELECTED\") : Response.Write(\"\")%>><%=rsPage_detail.Fields.Item(\"parentid\")%> ></option>

... jeg ved det er noget med \"selectedIndex\" i js men så ved jeg ikke mere.

Håber du kan forstå dette.

-Bambino
Avatar billede bambino Nybegynder
17. september 2001 - 17:56 #3
Den dropdown som generes af js hedder \"selection\"

-Bambino
Avatar billede olebole Juniormester
17. september 2001 - 18:03 #4
document.formNavn.selectNavn.selectedIndex = 2;

Select\'er option nummer 3 (vi starter jo på 0). Hjælper det dig?
/mvh
Avatar billede bambino Nybegynder
18. september 2001 - 11:43 #5
Ikke så meget, jeg har prøvet at lege lidt med ovenstående linie og kan sagtens få den til at \"selecte\" f.eks. nr. 2 som du gør. Men det skal jo ske i en if-sætning dynamisk.

Hvis man på en måde kunne indsætte \"selected\" i hver linie såsom her \"<option value=\"subpage\" SELECTED>Subpage</option>\", måske noget alla det her:

pagetype[3] = new Array();  //  Mainpage
pagetype[3][0] = new category(\"Where in the Main Menu?\",0,\"SELECTED\");
pagetype[3][1] = new category(\"In the toparea\",17,\"\");
pagetype[3][2] = new category(\"In the bottomarea\",18,\"\");

..Så kunne jeg selv lave en if-sætning i ASP der blot en indsat i en repeat-region imellem js-koden.

Håber du kan hjælpe - det er meget vigtigt at dette virker.

takker..

-Bambino
Avatar billede olebole Juniormester
18. september 2001 - 12:15 #6
bambino >> Jeg er stadig ikke med på, hvad du vil lave. Drop al tale om ASP...bruger det ikke og agter ikke at spilde et kvart sekund på det. JavaScript, derimod kan jeg godt hjælpe dig med.
Hvorfor i al verden ville du dog sætte \'selected\' ind i hver option? Det kan der da aldrig komme fornuft ud af...!?!?!
/mvh
Avatar billede bambino Nybegynder
18. september 2001 - 14:17 #7
Jeg vil ikke sætte selected ind i hver option, men muligheden for at det pågældende option kan være have selected stående som værdi eller hvad det hedder skal være tilstede (ligesom i HTML). Forestil dig du opretter en brugerprofil på et website hvor du angiver din branche som \"IT\" ud fra en lang liste der generes fra en database. En dag vil du så opdatere din profil og din branche \"IT\" vil så (selvfølgelig) være \"selected\".

Du må forstå at dette ikke er manuelt arbejde, \"selectionen\" af records i dropdown skal ske dynamisk. Så kort sagt skal man på godt dansk kunne angive i javascript, ASP, SQL, PHP eller whatever at:

Hvis \"brancheid\" fra \"brancheliste\" er lig med \"brancheid\" fra \"brancheprofil\" skal \"brancheid\" være selected i dropdown!

Dette er muligt i ganske almindelig HTML med hjælp fra asp, php, perl osv., hvorfor ikke i javascript. Og jeg kan ikke bruge \"selectedIndex = 2;\" da jeg jo ikke aner hvilket index der skal selectes.

I HTML (meget simpelt)

\"<option value=\"subpage\" SELECTED>Subpage</option>\"

Jeg skal bare bruge det samme i js. 

-Bambino

p.s. Det er altså ikke så kompliceret!
Avatar billede olebole Juniormester
18. september 2001 - 14:21 #8
Jeg bruger selv PHP, så jeg kender udmærket til serverside-teknologi, men forstår ikke dine forklaringer...jeg kan ikke se, hvor dit problem ligger
/mvh
Avatar billede bambino Nybegynder
19. september 2001 - 16:53 #9
Ok hvordan vil du så få js dropdown-menuen til at blive selected dynamisk ud fra en værdi i en database... du er sgu hajen olebole, det burde du kunne finde ud af!

-Bambino
Avatar billede olebole Juniormester
19. september 2001 - 22:23 #10
Jamen, for at JavaScript kan få fat i det, skal det jo skrives i et HTML-dokument først. JavaScript er normalt ren clientside og kan ikke hente data i en DB.
Du kan dog bruge serverside JavaScript hos nogle udbydere, men jeg har ikke indtryk af, det er hos ret mange. Jeg har personligt ikke rodet med det, men det skulle være temmelig enkelt.
Du må servere mig nogle nedskrevne arrays, før jeg kan behandle dem med JS  :)
/mvh
Avatar billede bambino Nybegynder
20. september 2001 - 09:38 #11
Hej olebole.

Nu skal du ikke bekymre dig længere jeg har fundet en løsning ved at lade begge dropdown blive generet fra database (ASP) først på update-siden og naturligvis bare lade onchange ændre indholdet i dropdown nr. 2 hvis brugeren ønsker dette.

Det burde jeg nok have tænkt på fra starten, men regnede ikke med at javascriptet kunne \"fjerne\" indholdet fra databasen \"onchange\" og så generere en ny dropdown ud fra arrays - men det virker sgu nu!

Tak for din tålmodighed, du får pointene for din ihærdighed.

MVH Bambino
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