Avatar billede Jman Praktikant
08. august 2003 - 14:27 Der er 22 kommentarer og
2 løsninger

En dropdownmenu med indhold fra db skal udløse en ny dropdown

jvfr. http://www.eksperten.dk/spm/384430 har jeg meget megen omhu fået hjælp til at hente en <div> med beskrivelse af det aktive emne i en dropdown.
Det jeg søger nu er en slags OnChange, hvor der - i min næste dropdown - hentes kategorier, svarende til emnet i dropdown 1.

Koden til dropdown 1 er:

<script language="javascript" type="text/javascript">
var beskr = new Array();
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Session("ConnectionString")
sql="SELECT Distinct Betegnelse, Beskrivelse From Afdeling Where Prioritet = 1 ORDER BY betegnelse"
set rs = conn.execute(sql)
Do While Not rs.EOF %>
beskr['<%=rs("Betegnelse")%>'] = '<%=rs("Beskrivelse")%>';
<% rs.MoveNext
  Loop
  rs.Close %>
</script>
<select name="afdeling" onchange="document.getElementById('beskrivelse').innerHTML=beskr[this.options[this.selectedIndex].text];">
<option value="vælg">Vælg afdeling</option>
<%
set rs = conn.execute(sql)
Do While Not rs.EOF %>
<option value="<%=rs("Betegnelse")%>"><%=rs("Betegnelse")%></option>
<%    rs.MoveNext
Loop
rs.Close
conn.close %>    
</select>
<td><span id="beskrivelse" class="tbltxt">Her kommer beskrivelsen</span></td>

Det jeg skal have i dropdown 2 er:

<option value="vælg">vælg kategori</option>
<% Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open Session("ConnectionString")
  sql="SELECT Distinct Betegnelse From OpgaveKategori WHERE ansvarlig = '" & request.form("afdeling") & "' ORDER BY betegnelse"
set rs = conn.execute(sql)
Do While Not rs.EOF
%>
<option value="<%=rs("Betegnelse")%>"><%=rs("Betegnelse")%></option>
<%
rs.MoveNext
Loop
rs.Close
conn.close
%>    
</select>

D.v.s. Når der sker en ændring i dropdown1 skal den eksekvere dropdown 2
Avatar billede roenving Novice
08. august 2003 - 14:54 #1
-- jeg er lige igang med forarbejderne til min Working demo #4, og er foreløbig kommet så langt:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Smart selects</title>
<script language="javascript" type="text/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body{padding:10px;font-family:Tahoma,Verdana,Arial,sans-serif;text-align:center;background:#EBD3E2;line-height:1.5;overflow:hidden;}
</style>

<script language="javascript" type="text/javascript">
var arr1 = [
    ["Valg 1",
        ["2. valg 1 (1)","2. valg 2 (1)","2. valg 3 (1)"]],
    ["Valg 2",
        ["2. valg 1 (2)","2. valg 2 (2)","2. valg 3 (2)","2. valg 4 (2)"]]
];

function initSels(){
    createOpts(document.getElementById('sel1'), arr1);
}

function createOpts(sel, arr, n){
alert(typeof arr[0]);
sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
for(i=0;arr.length>i;i++){
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
    if(typeof arr[0] == 'object'){
      opt.value = arr[i][0];
      opt.text = arr[i][0];
    }else{
  opt.value = arr[1][i];
  opt.text = arr[1][i];
  }
}
}
</script>
</head>
<body style="font-size:12px;" onload="initSels()">
Afhængige selects<br><br>
<div style="text-align:left;">
<form name="sels">
To afhængige selects:&nbsp;&nbsp;&nbsp;
<select name="sel1" id="sel1" onchange="createOpts(document.getElementById('sel2'), arr1[this.selectedIndex-1]);">
<option value="">Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel2" id="sel2">
<option value="">Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</form>
</div>
</body>
</html>

-- det som så skal udføres fra dit asp-script er at udfylde javascript-databasen, og hvis jeg skal hjælpe med det, kræver det, at din database er nemt organiseret -- ellers bliver det asp-spørgsmål, hvor jeg forøvrigt senere (idag eller imorgen) regner med at oprette et spørgsmål ...

-- men prøv lige den der, så du kan se, om det er det, du vil have !-)
Avatar billede roenving Novice
08. august 2003 - 15:01 #2
-- og jeg udvikler lige nu på den, så der er bugs, siden sidste indlæg har jeg fjernet 3 !-)
Avatar billede roenving Novice
08. august 2003 - 15:24 #3
Nu er den første beta kommet op, så du kan følge med i udviklingen -- de egentlige børnesygdomme skulle være udryddet !o]

Se http://roenving.users.whitehat.dk (#4 !-)
Avatar billede Jman Praktikant
08. august 2003 - 16:56 #4
hej roenving
Databasen er ens organiseret - d.v.s. det du har hjulpet mig med i første omgang er det samme som anden omgang. Database 2 (hvis man kan sige det sådan er opbygget med
[id] [Ansvarlig] [Betegnelse]
Avatar billede Jman Praktikant
08. august 2003 - 16:58 #5
b.t.w. Dit pop-up eksempel med djævlen virker ikke efter hensigten. Jeg kan kun se 1/5 af billedet i det vindue, der popper op
Og; nu er det ikke for at vine dig til eller noget.. men hvis du vil have hjælp til noget grafisk layout eller lign. må du sige til... :)
ref: www.lindhagemoeller.dk / www.jj-grafik.dk / www.ntconsult.dk / www.claviers.dk / www.midtergruppen.dk / www.jman.dk
to mention a few :)
Avatar billede roenving Novice
08. august 2003 - 17:03 #6
-- Hvilken opløsning bruger du, billedet er ca. 700 - 750 px i bredde/højde ...
Avatar billede Jman Praktikant
09. august 2003 - 02:30 #7
jeg bruger 1280*1024
Avatar billede roenving Novice
09. august 2003 - 02:51 #8
Hvilken browser ?-)

-- jeg går (efter en anelse eftertanke) ud fra, at det er fordi funktionen til udvidelse ikke fungerer, så du kun ser start-størrelsen ...

Jeg har nemlig testet min funktion i IE 6 og Mozilla 1.5 (og kun brugt funktioner, som understøttes af IE 4+ og NS6+ !-)
Avatar billede roenving Novice
09. august 2003 - 02:52 #9
PS! Funktionaliteten i WD4 er nu på plads, så jeg vil prøve at kigge på din ...
Avatar billede roenving Novice
09. august 2003 - 03:28 #10
Jeg har kigget lidt nu, men bliver en anelse i tvivl, for jeg synes dine begreber krydser hinanden ...

Det som jeg selv har bygget op kræver en javascript-database sådan:

var arr = [
  ["Valg 1",
    ["2. valg 1 (1)","2. valg 2 (1)","2. valg 3 (1)"]],
  ["Valg 2",
    ["2. valg 1 (2)","2. valg 2 (2)","2. valg 3 (2)","2. valg 4 (2)"]],
  ["Valg 3",
    ["2. valg 1 (3)","2. valg 2 (3)","2. valg 3 (3)","2. valg 4 (3)","2. valg 5 (3)"]]
];

-- og så blev jeg i tvivl om ansvarlig skulle være i select 1 eller select 2 ?-)
Avatar billede roenving Novice
09. august 2003 - 11:34 #11
Se nu har jeg _prøvet_ at sætte det sammen !-)

-- da jeg som tidligere sagt _ikke_ er hjemme i asp-scripting er der nok nogle 'brølere', så kig lige efter min behandling af variablen txt ...

But here goes:

<script language="javascript" type="text/javascript">
var arr = [
<%
txt = "["
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Session("ConnectionString")
sql="SELECT Distinct Betegnelse From Afdeling Where prioritet = 1 ORDER BY Betegnelse"
set rs = conn.execute(sql)
Do While Not rs.EOF
txt=txt+"<%=rs("Betegnelse")%>,["

  sql1="SELECT Distinct Betegnelse From OpgaveKategori WHERE ansvarlig = '" & request.form("afdeling") & "' ORDER BY betegnelse"
set rs1 = conn.execute(sql)
Do While Not rs1.EOF
txt=txt+"rs1("Betegnelse")%>,"

rs1.MoveNext
Loop
rs1.Close
txt=left(txt,len(txt)-1)+"],["
rs.MoveNext
Loop
rs.Close
conn.close
txt=left(txt,len(txt)-2)+"]]"
Response.Write txt
%>

function createOpts(sel, arr, n){
//alert(n);
sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
if(n==0){
  opt.text = "< Vælg kategori";
    return true};
  opt.text = "Vælg kategori";
for(i=0;arr.length>i;i++){
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
    if(typeof arr[0] == 'object'){
      opt.value = arr[i][0];
      opt.text = arr[i][0];
    }else{
  opt.value = arr[i];
  opt.text = arr[i];
  }
}
}
</script>


<select name="afdeling" onchange="document.getElementById('beskrivelse').innerHTML=beskr[this.options[this.selectedIndex].text];createOpts(document.getElementById('ansvarlig'), arr1[Math.max(0,this.selectedIndex-1)][1], this.selectedIndex);">

<select name="ansvarlig" id="ansvarlig">
<option value="vælg">&lt; Vælg kategori</option>
</select>

Du skal selvfølgelig sætte ind i den kode du har allerede (måske en lille backup først ?-)

Bemærk også, at koden til den 1. select-box er blevet umanerlig lang og tæt på uhåndterlig -- hvis den ikke virker er det første at smide det videre til et andet sted, så vi kan overskue det ...
Avatar billede roenving Novice
09. august 2003 - 14:57 #12
-- hov, jeg kom til at kigge lidt nærmere på den anden sql-sætning, og også variabel-navnene i de to del-scripts som jeg har nestet ...

Det kanmåske give problemer at bruge det samme variabel-navn to gange, og sql-sætningen skal selvfølgelig bruge variablen fra den første -- jeg vil gætte på sådan:

<%
txt = "["
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Session("ConnectionString")
sql="SELECT Distinct Betegnelse From Afdeling Where prioritet = 1 ORDER BY Betegnelse"
set rs = conn.execute(sql)
Do While Not rs.EOF
txt=txt&"'"&rs("Betegnelse")&"',["

  sql1="SELECT Distinct Betegnelse From OpgaveKategori WHERE ansvarlig = '" & rs("Betegnelse") & "' ORDER BY betegnelse"
set rs1 = conn.execute(sql1)
Do While Not rs1.EOF
txt=txt&"'"&rs1("Betegnelse")&"',"

rs1.MoveNext
Loop
rs1.Close
txt=left(txt,len(txt)-1)&"],["
rs.MoveNext
Loop
rs.Close
conn.close
txt=left(txt,len(txt)-2)&"]]"
Response.Write txt
%>

-- der var også lige noget streng-konkatenering, som jeg har rettet i, så det blev hele blokken jeg dumpede ...

Da javascript-databasen er en følsom ting mht. tegnsætning, er der store muligheder for, at jeg har fået lavet nogle småfejl i vbscriptet, så det kan være nødvendigt at tygge det langsomt, men jeg stiller som nævnt senere idag et spm i asp-kategorien om dette !-)
Avatar billede roenving Novice
12. august 2003 - 16:49 #13
Avatar billede Jman Praktikant
19. august 2003 - 14:14 #14
jeg kan sgu ikke få det til at virke ...
Avatar billede Jman Praktikant
19. august 2003 - 14:15 #15
kan du evt. prøve at sætte det hele samme, så det står korrekt - det kan være jeg bedre kan gennemskue det, så
Avatar billede roenving Novice
19. august 2003 - 17:46 #16
Kan du ikke prøve at dumpe eller linke til resultatet af asp-fortolkningen -- som nævnt har vi fat i en ret følsom syntaks ...
Avatar billede Jman Praktikant
19. august 2003 - 17:56 #17
nope desværre - det er en intranet på arbejdet... Jeg tror dog jeg har fundet en anden løsning i asp. Måske er den lidt træsko-agtig, men det kan være det går alligvel. Jeg skal arbejde videre med den i morgen, og virker det kan jeg lige poste det her
Avatar billede Jman Praktikant
19. august 2003 - 17:57 #18
b.t.w. - din popup virker nu også på min browser :)
Avatar billede roenving Novice
19. august 2003 - 18:03 #19
-- jamen så må vi jo se om det går at gå i træsko *g*

Og hvilken browser er det ?-)
Avatar billede Jman Praktikant
19. august 2003 - 18:09 #20
ie 6 på win XP-pro
Avatar billede Jman Praktikant
20. august 2003 - 11:12 #21
hej roenvig!
Således blev det:
      <form action="default.asp?page=inc_opgave.asp" method="post" name="form1">
      <select name="Ansvarlig" size="1" onChange="document.form1.submit()">
      <% if request.form("ansvarlig") = "" then %>
      <option value="vælg">Vælg afdeling</option>
      <% else %>
      <option value="<%=request.form("ansvarlig")%>" selected><%=request.form("ansvarlig")%></option>
      <% end if %>
      <%
      Set Conn_afd = Server.CreateObject("ADODB.Connection")
      Conn_afd.Open Session("ConnectionString")
      sql_afd="SELECT Betegnelse, Beskrivelse From Afdeling where Prioritet=1 ORDER BY Betegnelse"
      set rs_afd = conn_afd.execute(sql_afd) %>
      <% Do While Not rs_afd.EOF %>
      <option value="<%=rs_afd("Betegnelse")%>" "selected"><%=rs_afd("Betegnelse")%></option>
      <%
      rs_afd.MoveNext
      Loop
      rs_afd.Close
      %>
      </select>
      </form>

      <%
      if request.form = "" then
      else
      sql_afdbeskr="SELECT Betegnelse, Beskrivelse From Afdeling where Betegnelse='" & request.form("ansvarlig") & "'"
      set rs_afdbeskr = conn_afd.execute(sql_afdbeskr)
      response.write "<h4 class=""TblTxt""><b>Du har valgt "&rs_afdbeskr("Betegnelse")&".</b> "&rs_afdbeskr("Beskrivelse")&"</h4><br>"
      response.write "<h4 class=""TblTxt"">Vælg evt. en anden afdeling hvis du alligevel ikke mener dit spørgsmål tilhører denne afdeling.</h4><br>"
      response.write "<h4 class=""TblTxtBld"">Vælg en kategori, der passer til din opgave:</h4>"
      end if
      rs_afdbeskr.Close
      conn_afd.close
      %>
      <% if request.form("ansvarlig") = "" then %>
      <% else %>

      <form action="default.asp?page=inc_opgave.asp&ansvarlig=<%=request.form("ansvarlig")%> method="post" name="form2">
      <select name="Kategori" size="1" onChange="document.form2.submit()">
      <option value="vælg">vælg kategori</option>
      <%
      Set Conn = Server.CreateObject("ADODB.Connection")
      Conn.Open Session("ConnectionString")
      sql="SELECT Betegnelse From OpgaveKategori where ansvarlig = '" & request.form("Ansvarlig") & "'"
      set rs = conn.execute(sql) %>
      <% Do While Not rs.EOF %>
      <option value="<%=rs("Betegnelse")%>"><%=rs("Betegnelse")%></option>
      <% rs.MoveNext
      Loop
      rs.Close
      conn.close
      %>   
      </select>
      </form>
      <%end if%>
Avatar billede Jman Praktikant
20. august 2003 - 11:13 #22
smid lige et svar og lidt skal falde af, til dig også :)
Avatar billede roenving Novice
20. august 2003 - 15:16 #23
Oki '-)
Avatar billede roenving Novice
20. august 2003 - 16:21 #24
-- og tak for points ;~}
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