22. maj 2002 - 14:57Der er
5 kommentarer og 2 løsninger
autoudfyld 2 input felter ud fra valgt værdi i dropdown liste
Hej Jeg har en form der henter værdier fra en tabel i en database ind i en dropdown liste ved hjælp af ASP. Når jeg vælger et element i listen skal der fra tabellen hentes yderligere værdier ind i 2 input felter. Indtil der bliver valgt noget i listen skal de to input felter være skjulte. I min select sætning har jeg indsat ID'et fra tabellen som value og mener at jeg ud fra dette ID kan hente resten af feltnavnene fra tabellen. Jeg har bare lidt svært ved at finde ud af hvordan. Hermed min kode - hvori der kun er medtaget det nødvendige for at få et overblik over problemet: ----------- <script language="JavaScript"> function mediaChange(){ document.customerDataForm.cp.value = ??; document.customerDataForm.rho.value = ??; } </script>
------------ Media tabellen består af felterne: MediaID, Media; Cp og Rho
Jeg har en ide om at det skal gøres ved hjælp af onChange og et javascript, som det også fremgår af koden.
Jeg vil gerne vide hvordan jeg får de korrekte værdier ind i mine input felter samt hvordan jeg får inputfelterne til at være usynlige, indtil man vælger en anden værdi end default-værdien i dropdownboksen. //Lis\\
<form name="something"> <% set RSMedia = DatabaseConnection.Execute ("Select mediaID, media From Media") Do Until RSMedia.EOF OptionStringMedia = OptionStringMedia & "<OPTION VALUE=""" & RSMedia("MediaID") & """>" & RSMedia("Media") & "</OPTION>" RSMedia.MoveNext Loop %> <td><select name="media" size="1" style="width:180px" OnChange="document.something.submit();"> <option value="0">Vælg noget :) <% = OptionStringMedia %></select></td> <% selectedID = Request("media") If media <> "0" Then Set Rs2 = DatabaseConnection.Execute ("Select cp, rho From Media WHERE mediaID = " & media & "") If Not Rs2.EOF Then %> <td><input type="text" name="cp" size="16" value="<%=Rs2(0)%>" /></td> <td><input type="text" name="rho" size="16" value="<%=Rs2(1)%>" /></td> <% End If ' Rs2
End If %> </form>
Du kunne sikkert godt tænke dig at den ikke skiftede side ???
Det er self. muligt men så er det noget med at opbygge en javascript array med alle dine værdier i... og så bruge den array til at udskrive din selectbox (pas på javascript understøtter ikke "dynamiske" arrays, over et vist antal elementer (så skal antal elementer defineres først..) ) og så kan du jo så have en onchange funktion der tar de "resterende" værdier fra arrayen.. ala function skift() { document.something.cp.value = DINARRAY[3,document.something.media.selectedIndex] }
jeg kigger på dit svar i aften eller i morgen formiddag. Det behøver kun at virke i IE 5.0 og op, da det ikke skal være tilgængelig for alle og der vil blive opsat systemkrav for brugerne.
Så kan jeg da vise hvordan man kan lave det med JavaScript, fordelen er så at siden ikke skal loades hver gang man vælger noget i selec'en, den skjulte de to input felter hvis der ikke er valgt noget:
<% set RSMedia = server.CreateObject("ADODB.Recordset") set DatabaseConnection = server.CreateObject("ADODB.Connection") DatabaseConnection.Open "Data Source="& server.mappath("db10.mdb") & ";Provider=Microsoft.Jet.OLEDB.4.0;" %> <HTML> <head> <SCRIPT LANGUAGE="JavaScript"> function mediaChange(){ var kunder = new Array(); kunder[0] = new Array("",""); <% set RSMedia = DatabaseConnection.Execute ("Select * From Media") OptionStringMedia = "<OPTION VALUE=""none"">Vælg her...</OPTION>" i = 1 Do Until RSMedia.EOF OptionStringMedia = OptionStringMedia & "<OPTION VALUE=""" & RSMedia("MediaID") & """>" & RSMedia("Media") & "</OPTION>" %> kunder[<%=i%>] = new Array("<%=RSMedia("cp")%>","<%=RSMedia("rho")%>"); <% i = i +1 RSMedia.MoveNext Loop %> if (document.customerDataForm.media.selectedIndex > 0) { document.customerDataForm.cp.value = kunder[document.customerDataForm.media.selectedIndex][0]; document.customerDataForm.rho.value = kunder[document.customerDataForm.media.selectedIndex][1]; document.customerDataForm.cp.style.visibility = "visible"; document.customerDataForm.rho.style.visibility = "visible"; } else { document.customerDataForm.cp.style.visibility = "hidden"; document.customerDataForm.rho.style.visibility = "hidden"; } } </SCRIPT> </head> <body onload="mediaChange()"><center>
Tak for hjælpen til jer begge to. Nu har jeg afprøvet begge forslag - det første fra a1 virkede for så vidt fint nok, men jeg var lidt ked af submit-funktionen og når siden reloadede forsvandt den værdi jeg havde valgt i dropdown-listen. I stedet for kom listen på ny frem fra DB med den værdi, som normalt var default. Derimod virkede eagleeye's forslag på den måde jeg oprindeligt havde tænkt det skulle være. Samtidig var der også koden til at vise og skjule input-felterne uden at skulle i gang med layers. Jeg håber I begge er tilfredse med pointfordelingen. Jeg takker i alle tilfælde for god og hurtig hjælp. //Lis
Synes godt om
Ny brugerNybegynder
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.