Avatar billede th20 Nybegynder
20. oktober 2005 - 13:33 Der er 6 kommentarer

Combobox med onchange?

Hej

Jeg er ved at opbygge en side i ASP som skal sende oplysninger til et firma via mail. De oplysninger der skal sendes udfyldes i en form, og sendes herefter. Jeg har flere steder hvor jeg slår op i en database og det virker fint.
Problemet er nu at jeg har 2 comboboxe der skal være afhængige af hinanden, så når jeg har foretaget et valg i den ene skal den anden opdatere sig alt efter hvad der er valgt.
Selve onChange virker fint nok nu, men når jeg bruger denne metode så resetter den resten af formen, hvad kan jeg gøre for at få gemt mine indtastninger?
Avatar billede softspot Forsker
20. oktober 2005 - 13:52 #1
Hvordan ser koden ud?

Det lyder som om der enten bliver kaldt en funktion på formularen som resetter felterne, eller at formularen bliver sendt til serveren... men det vil nok fremgå mere tydeligt, hvis du viser formularen.
Avatar billede th20 Nybegynder
20. oktober 2005 - 13:59 #2
Her er kode, det er lidt et mix af noget jeg har fundet på netcoders og lidt eget lavet.
I dette tilfælde bliver textbox test1 ikke gemt når man laver onchange på combobox 1.
<%@ Language=VBScript %>
<!--#include file="db.asp"-->
<%
Level = Request.QueryString("Level") 'Get level, control how many dropdown boxes we should make
TmpModel = Request.QueryString("Model") 'Shows the selected value in the dropdown box
TmpController = Request.QueryString("Controller") 'Shows the selected value in the dropdown box
TmpOS = Request.QueryString("OS") 'Shows the selected value in the dropdown box

'Takes care of the first time your running this file and set the level to 1 to avoid error
If Level = "" Then
Level = "1"
End If

'-------------------------------------------------------------------

If (Level>"1") OR (Level="1") Then
'Create the SQL string
strSQL = "Select * from fraktion1 order by `beskrivelse`"

'Open DB
'rs.Open strSQL, strDSN, 1
set RS = conn.execute(strSQL)

'Get the data from the DB into an array, for performance.
If Not rs.EOF Then
ArrRecords1 = rs.getrows()
End If

'Cleaning up and close the connection
rs.Close
'set rs = nothing
End If

'-------------------------------------------------------------------

If (Level>"2") OR (Level="2") Then
'Create the SQL string
strSQL = "Select * from fraktion2 where `gruppe` ='"& TmpModel & "'"

'Open DB
set RS = Conn.execute(strSQL)

If Not rs.EOF Then
ArrRecords2 = rs.getrows()
End If

'Cleaning up and close the connection
rs.Close
'set rs = nothing
End If

'-------------------------------------------------------------------

If (Level>"3") OR (Level="3") Then
'Create the SQL string
strSQL = "Select * from fraktion2 where `gruppe` ='"& TmpModel & "'"
'Open DB

set RS = Conn.execute(strSQL)

If Not rs.EOF Then
ArrRecords3 = rs.getrows()
End If

'Cleaning up and close the connection
rs.Close
set rs = nothing
End If

'-------------------------------------------------------------------------------------
%>

<script language="JavaScript">
<!--
function jumppage(sel) {

var i = sel.selectedIndex
if (i!=0) { top.location.href = sel.options[i].value }

}
// -->
</script>

<%
'************
' Level 1
'************
If (Level>"1") OR (Level="1") Then
%>
<form id="ProductSelector1" name="ProductSelector1"><p>
<select name="go" onChange="jumppage(this);" size=1>
<%
If Level > "1" Then
%>
<option selected><%=TmpModel%></option>
<%
Else
%>
<option selected>Vælg Model</option>
<%
End If
%>
<option>- - - - - - - - - - - - - - - - -</option>
<%
For i = 0 to Ubound(ArrRecords1,2)
%>
<option value="Driver1.asp?Level=2&Model=<%=ArrRecords1(1,i)%>"><%=ArrRecords1(1,i)%></option>
<%
Next
%>
</select>
<input type="text" name="test1">
</form>
<%
End If

'*************
' Level 2
'*************
If (Level>"2") OR(Level="2") Then
%>
<form id="ProductSelector2" name="ProductSelector2"><p>
<select name="go" onChange="jumppage(this);" size=1>
<%
If Level > "2" Then
%>
<option selected><%=TmpController%></option>
<%
Else
%>
<option selected>Vælg Controller</option>
<%
End If
%>
<option>- - - - - - - - - - - - - - - - -</option>
<%
For i = 0 to Ubound(ArrRecords2,2)
%>
<option value="driver1.asp?Level=3&Model=<%=TmpModel%>&Controller=<%=ArrRecords2(2,i)%>"><%=ArrRecords2(2,i)%></option>
<%
Next
%>
</select>
<input type="text" name="test2" value="<%=TmpTest%>">
</form>
<%
End If

'************
' Level 3
'************
If (Level>"3") OR (Level="3") Then
%>
<form id="ProductSelector3" name="ProductSelector3"><p>
<select name="section" size="1" language="javascript" onChange="LoadProductPage(document.ProductSelector3.section.options document.ProductSelector3.section.selectedIndex.value);">
<%
If Level > "3" Then
%>
<option selected><%=TmpOS%></option>
<%
Else
%>
<option selected>Vælg Operativ System</option>
<%
End If
%>
<option>- - - - - - - - - - - - - - - - -</option>
<%
For i = 0 to Ubound(ArrRecords3,2)
%>
<option value="driver1.asp?Level=4&Model=<%=TmpModel%>&Controller=<%=TmpController%>&OS=<%=ArrRecords3(2,i)%>"><%=ArrRecords3(2,i)%></option>
<%
Next
%>
</select>
</form>
<%
End If
%>
<br><br>
<%
If Level = "4" Then
Response.Write("Du har valgt følgende : ")%><br><br><%
Response.Write("Model : " & TmpModel)%><br><%
Response.Write("Controller : " & TmpController)%><br><%
Response.Write("Operativ system : " & TmpOS)
End If
%>
Avatar billede softspot Forsker
20. oktober 2005 - 16:38 #3
Synderen er denne her:

<script language="JavaScript">
<!--
function jumppage(sel) {

var i = sel.selectedIndex
if (i!=0) { top.location.href = sel.options[i].value }

}
// -->
</script>

Jeg skal bare lige være helt sikker på hvad det er du vil og hvordan det kan løses mest hensigtsmæssigt. Umiddelbart synes jeg der er behov for en omstrukturering af din formularer, men kan ikke helt gennemskue om det er en acceptabel løsning for dig...
Avatar billede th20 Nybegynder
20. oktober 2005 - 16:42 #4
Det er ikke helt denne kode jeg benytter på den rigtige hjemmeside, men det skal fungere på samme måde.
Det jeg skal er, når jeg i combobox 1 vælge A, så skal combobox 2 vises hvad der i databasen står med A som gruppe. Det skal gøres uden at andre tekstfelter bliver resat.
Avatar billede softspot Forsker
20. oktober 2005 - 17:00 #5
Som jeg ser det, har du (mindst 2) muligheder for at løse dette.

1. Ændre det hele til en stor formular og så lave et postback (submit) til serveren hvor du sørger for at flytte værdierne fra request.form over i tilsvarende felter i HTML-koden og opdatere combobox 2 med værdierne som svarer til valget i combobox 1.

2. Sende data med ud til klienten (f.eks. i form af javascript arrays), som sætter klienten i stand til opdatere din combobox 2 alt efter hvad du vælger i combobox 1.

Hvilken af de 2 løsningsmodeller du vælger, afhænger bla. af hvormeget data du har til combobox 2 (til alle scenarier). Hvis der er meget data, vil jeg nok foretrække et serverpostback, men det afhænger igen af hvor stor belastning der er på serveren osv. osv.
Avatar billede th20 Nybegynder
20. oktober 2005 - 18:12 #6
prøv at se her, der er det de rigtige data der er vist, men på samme kode som vist ovenfor. http://fun.dncclan.dk/driver1.asp

Jeg vil tro løsning 2 er den bedste, men jeg ved intet om java så den er måske for svær for mig.
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