Avatar billede reino Nybegynder
13. august 2003 - 17:28 Der er 13 kommentarer og
1 løsning

Combo boks

Hej,

Har prøvet at søge på forummet samt andre relevante steder men ikke fundet det som jeg søger. Jeg skal have lavet flg:

En 3 combo dropdown boks der genereres på baggrund af en acces database:
(struktur i db er som følger: producent, model, varenummer)

Det skal helst være en kombo af java+asp så sitet ikke reloades.

Flg:

1. Producent
(som så genererer pkt.2)
2. Model
(som så genererer pkt.3)
3. Varenummer

Det haster lidt så gode point gives :). Kunne være super hvis nogle kunne være behjælpelige.

Hav en god dag.
Avatar billede cdc Novice
13. august 2003 - 17:34 #1
Avatar billede reino Nybegynder
13. august 2003 - 17:41 #2
hej cdc

Ja, noget i den stil, ved du om data er genereret fra en db eller er det hardcoded ? :).
Avatar billede cdc Novice
13. august 2003 - 17:42 #3
lige denne er hardcoded, men har den også som asp hvor data genereres fra db, men den ligger også i 3 sprog og en extern connection
Avatar billede reino Nybegynder
13. august 2003 - 17:46 #4
oki, noget du selv har kodet eller noget free script ?
Avatar billede jnissen Nybegynder
13. august 2003 - 17:49 #5
Du kan evt se her, så kan du selv prøve at lege lidt med det :-)

http://activedeveloper.dk/locator.asp?guid=001000000057
Avatar billede reino Nybegynder
13. august 2003 - 17:54 #6
ok, tak, har været inde på denne, men mangler javascriptet :). Er desværre ingen ørn til java.
Avatar billede jnissen Nybegynder
13. august 2003 - 17:54 #7
Så kan du kigge her: http://www.eksperten.dk/spm/308159
Avatar billede eagleeye Praktikant
13. august 2003 - 18:00 #8
Prøv med dette eks det er nok noget i stil med det du søger:


<html>
<head>

<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db9.mdb")

SQL = "SELECT [Producent], [Model], [Varenummer] FROM tabelnavn ORDER BY [Producent], [Model], [Varenummer]"

Set rs = Conn.Execute(SQL)

rsArr = rs.GetRows()
'Så er [Producent] i rsArr(0,i), [Model] er i rsArr(1,i), [Varenummer] er i rsArr(2,i)
Conn.Close
%>

<script language="javascript" type="text/javascript">
var arr = [
<%
oldValg1 = ""
oldValg2 = ""
for i = 0 to ubound(rsArr,2)
  if oldValg1 <> rsArr(0,i) then
    Response.write "['" & rsArr(0,i) & "', [" & vbCrLf
    oldValg1 = rsArr(0,i)
  end if

  if oldValg2 <> rsArr(1,i) then
    Response.write "['" & rsArr(1,i) & "'"
    oldValg2 = rsArr(1,i)
    newValg2 = true
  end if
  if newValg2 then
    Response.write "," & vbCrLf & "["
    newValg2 = false
  end if
 
  Response.write "'" & rsArr(2,i) & "'"
 
  t = i+1
  if t <= ubound(rsArr,2) then
    endValg = false
    if oldValg2 <> rsArr(1,t) then
      Response.write "]]"
      endValg = true
    end if
    if oldValg1 <> rsArr(0,t) then
      Response.write "]]"
      endValg = true
    end if
    Response.write ","
    if endValg = true then response.write vbCrLf
  else
    Response.write "]]]]"
  end if
next
%>
];
</script>
</head>
<body>
<script language="javascript" type="text/javascript">
function initSels(){
    createOpts(document.getElementById('sel3'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>
</head>

<body style="FONT-SIZE: 12px" onload="initSels()">

<form>
Producent:
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
  <option value="" selected>Vis alle</option>
</select>
<br>
Model:
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>
<br>
Varenummer:
<select name="sel5" id="sel5">
<option value="" selected>&lt;-- Vælg --</option>
</select>


</body>
</html>
Avatar billede reino Nybegynder
13. august 2003 - 22:12 #9
Hejsa

Præcist det jeg ledte efter. Dog har jeg et enkelt problem.

Hvis jeg benytter dit script kommer der ikke noget output, men hvis jeg benytter sql statementet:

SQL = "SELECT * FROM produkter ORDER BY [Producent], [Model], [Varenummer]"

får jeg output.

Hvis jeg benytter dit sql statement får jeg endvidere fejl fra IE 6.0:

arr ikke defineret

Any ideas ? :)

<html>
<head>

<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=path"

SQL = "SELECT [Producent], [Printer], [Varenummer] FROM produkter ORDER BY [Producent], [Printer], [Varenummer]"


Set rs = Conn.Execute(SQL)

rsArr = rs.GetRows()
'Så er [Producent] i rsArr(0,i), [Model] er i rsArr(1,i), [Varenummer] er i rsArr(2,i)
Conn.Close
%>

<script language="javascript" type="text/javascript">
var arr = [
<%
oldValg1 = ""
oldValg2 = ""
for i = 0 to ubound(rsArr,2)
  if oldValg1 <> rsArr(0,i) then
    Response.write "['" & rsArr(0,i) & "', [" & vbCrLf
    oldValg1 = rsArr(0,i)
  end if

  if oldValg2 <> rsArr(1,i) then
    Response.write "['" & rsArr(1,i) & "'"
    oldValg2 = rsArr(1,i)
    newValg2 = true
  end if
  if newValg2 then
    Response.write "," & vbCrLf & "["
    newValg2 = false
  end if
 
  Response.write "'" & rsArr(2,i) & "'"
 
  t = i+1
  if t <= ubound(rsArr,2) then
    endValg = false
    if oldValg2 <> rsArr(1,t) then
      Response.write "]]"
      endValg = true
    end if
    if oldValg1 <> rsArr(0,t) then
      Response.write "]]"
      endValg = true
    end if
    Response.write ","
    if endValg = true then response.write vbCrLf
  else
    Response.write "]]]]"
  end if
next
%>
];
</script>
</head>
<body>
<script language="javascript" type="text/javascript">
function initSels(){
    createOpts(document.getElementById('sel3'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>
</head>

<body style="FONT-SIZE: 12px" onload="initSels()">

<form>
Producent:
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
  <option value="" selected>Vis alle</option>
</select>
<br>
Model:
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>
<br>
Varenummer:
<select name="sel5" id="sel5">
<option value="" selected>&lt;-- Vælg --</option>
</select>


</body>
</html>
Avatar billede reino Nybegynder
13. august 2003 - 22:26 #10
Hej igen

Fandt fejlen, havde en apostrof i databasen, doooohhh :)

Takker Eagleeye, du er en gud :)
Avatar billede reino Nybegynder
14. august 2003 - 06:57 #11
Hej igen,

Eagleeye, er det muligt at generere en yderligere comboboks, dvs 4 valg ialt ?.

Hvis ja, opretter jeg lige et nyt spørgsmål såfremt.

:)
MVH
T
Avatar billede eagleeye Praktikant
14. august 2003 - 21:13 #12
Ja det er muligt.

Det kræver en ændring af ASP koden og SQL sætningen.
Avatar billede eagleeye Praktikant
14. august 2003 - 21:19 #13
Her er koden :


<html>
<head>

<%
set conn = server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db9.mdb")

SQL = "SELECT [kol_combo1], [kol_combo2], [kol_combo3], [kol_combo4] FROM tabelnavn ORDER BY [kol_combo1], [kol_combo2], [kol_combo3], [kol_combo4]"

Set rs = Conn.Execute(SQL)

rsArr = rs.GetRows()
Conn.Close
%>

<script language="javascript" type="text/javascript">
var arr = [
<%
oldValg1 = ""
oldValg2 = ""
oldValg3 = ""
for i = 0 to ubound(rsArr,2)
  if oldValg1 <> rsArr(0,i) then
    Response.write "['" & rsArr(0,i) & "', [" & vbCrLf
    oldValg1 = rsArr(0,i)
  end if

  if oldValg2 <> rsArr(1,i) then
    Response.write "['" & rsArr(1,i) & "'"
    oldValg2 = rsArr(1,i)
    newValg2 = true
  end if
  if newValg2 then
    Response.write "," & vbCrLf & "["
    newValg2 = false
  end if

  if oldValg3 <> rsArr(2,i) then
    Response.write "['" & rsArr(2,i) & "'"
    oldValg3 = rsArr(2,i)
    newValg3 = true
  end if
  if newValg3 then
    Response.write "," & vbCrLf & "["
    newValg3 = false
  end if

  Response.write "'" & rsArr(3,i) & "'"
 
  t = i+1
  if t <= ubound(rsArr,2) then
    endValg = false
    if oldValg3 <> rsArr(2,t) then
      Response.write "]]"
      endValg = true
    end if
    if oldValg2 <> rsArr(1,t) then
      Response.write "]]"
      endValg = true
    end if
    if oldValg1 <> rsArr(0,t) then
      Response.write "]]"
      endValg = true
    end if
    Response.write ","
    if endValg = true then response.write vbCrLf
  else
    Response.write "]]]]]]"
  end if

next
%>
];
</script>
</head>
<body>
<script language="javascript" type="text/javascript">
function initSels(){
    createOpts(document.getElementById('sel2'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>
</head>

<body style="FONT-SIZE: 12px" onload="initSels()">

Land:
<select name="sel2" id="sel2" onchange="createOpts(this,'sel2','sel3','sel4','sel5');">
  <option value="" selected>Vis alle</option>
</select>
<br>
Producent:
<select name="sel3" id="sel3" onchange="createOpts(this,'sel2','sel3','sel4','sel5');">
  <option value="" selected>Vis alle</option>
</select>
<br>
Model:
<select name="sel4" id="sel4" onchange="createOpts(this,'sel2','sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>
<br>
Varenummer:
<select name="sel5" id="sel5">
<option value="" selected>&lt;-- Vælg --</option>
</select>


</body>
</html>
Avatar billede reino Nybegynder
18. august 2003 - 10:07 #14
Hejsa Eagleeye, venligst se http://www.eksperten.dk/spm/388927 i forlængelse af denne.

Kunne være super hvis du kunne svare på dette. :). Hav en god dag.
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
Kurser inden for grundlæggende programmering

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