Kan det så ikke lade sig gøre at hvis brugeren i stedet for at scrolle ned til nr. f.eks. 667, så indtaster han bare 667 mens selectmenuen er markeret og så springer den selv derned?
Jeg ved ikke om det har nogen betydning, men der kan være nogle numre som ikke eksisterer i intervallet, hvis en person f.eks. ikke er ansat mere og er blevet slettet fra personalelisten..
nemlig og det er jo ikke så smart. Så jeg tænkte bare på om der ikke var en anden løsning for det er jo ikke særligt brugervenligt at man skal scrolle, når der er så mange tal...
Denne virker, men er noget langsom: <html> <head> <script type="text/javascript"> function findden(tal){ for (a=0;a<document.noget.test.all.length;a++){ if (document.noget.test.all[a].innerText == tal) document.noget.test.all[a].selected = true; } } </script> </head> <body> <form name="noget"> <select name="test"> <% for a = 0 to 1100 response.write "<option value='person " & a & "'>" & a & "</option>" next %> </select> find:<input type="text" name="finder" onKeyUp="findden(this.value)"> </form> </body>
Jeg kan ikke helt få det til at fungere. Jeg ved ikke om det kan have noget at gøre med at jeg henter personalenumrene frem i selectboksen direkte fra databasen.
Kan du ikke lige lave et svar, så du ka få nogle point, for jeg er sikker på det virker under normale omstændigheder.
Nedenstående kode genererer 2 selectmenuer (1 med personalenumre og 1 med tilhørende navne). Når man vælger et personalenummer kommer det tilhørende navn frem i den anden selectmenu....
<% CONST adOpenStatic = 3, adLockReadOnly = 1, adCmdText = &H0001 Dim connectionString, CONN_USER, CONN_PASS Dim RecordSet Dim conn Dim strSQL Dim rs
connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("fagcenter.mdb") set rs = server.CreateObject("ADODB.Recordset") set rsSel2 = server.CreateObject("ADODB.Recordset")
set conn = server.CreateObject("ADODB.Connection")
conn.Open connectionString, CONN_USER, CONN_PASS
strSQL = "SELECT * FROM ting" set rs = conn.Execute (strSQL)
select1Options = "" firstName = ""
do while not rs.EOF if firstName = "" then firstName = "Arr_" & rs("select1ID") end if select1Options = select1Options & "<option value=Arr_" & rs("select1ID") & ">" & rs("select1navn") & "</option>" strSQL = "SELECT * FROM select2 WHERE select1ID = " & rs("select1ID") Set rsSel2 = conn.execute (strSQL) %> var Arr_<%=rs("select1ID")%> = new Array( <% do while not rsSel2.EOF Response.Write """" & rsSel2("select2navn") & """" rsSel2.MoveNext if not rsSel2.EOF then Response.Write "," end if loop %> ); <% rs.MoveNext loop %>
function opdaterSelect2(the_array_name) { //var numbers_select = window.document.booking.the_examples; var the_array = eval(the_array_name); setOptionText(window.document.booking.select2, the_array); }
function setOptionText(the_select, the_array) { //slet indholdet at select2 inde de nye ligges ind. no_in_select = the_select.options.length; for (loop=0; loop <= no_in_select; loop++) { the_select.remove(0); } //fyld select2 op med nye data for (loop=0; loop < the_array.length; loop++) { var oOption = document.createElement("OPTION"); oOption.text=the_array[loop]; the_select.add(oOption); } }
function udfyldSelect2() { setOptionText (window.document.booking.select2,<%=firstName%>); }
Dem havde jeg lige fået klippet fra. Jeg ved ikke hvordan man laver det smartere. Jeg har nemlig fået hjælp til at lave koden (her på eksperten). Har ikke selv så meget styr på koden...
<SCRIPT LANGUAGE=JAVASCRIPT> <!--
<% CONST adOpenStatic = 3, adLockReadOnly = 1, adCmdText = &H0001 Dim connectionString, CONN_USER, CONN_PASS Dim RecordSet Dim conn Dim strSQL Dim rs
connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("fagcenter.mdb") set rs = server.CreateObject("ADODB.Recordset") set rsSel2 = server.CreateObject("ADODB.Recordset")
set conn = server.CreateObject("ADODB.Connection")
conn.Open connectionString, CONN_USER, CONN_PASS
strSQL = "SELECT * FROM ting" set rs = conn.Execute (strSQL)
select1Options = "" firstName = ""
do while not rs.EOF if firstName = "" then firstName = "Arr_" & rs("select1ID") end if select1Options = select1Options & "<option value=Arr_" & rs("select1ID") & ">" & rs("select1navn") & "</option>" strSQL = "SELECT * FROM select2 WHERE select1ID = " & rs("select1ID") Set rsSel2 = conn.execute (strSQL) %> var Arr_<%=rs("select1ID")%> = new Array( <% do while not rsSel2.EOF Response.Write """" & rsSel2("select2navn") & """" rsSel2.MoveNext if not rsSel2.EOF then Response.Write "," end if loop %> ); <% rs.MoveNext loop %>
function opdaterSelect2(the_array_name) { //var numbers_select = window.document.booking.the_examples; var the_array = eval(the_array_name); setOptionText(window.document.booking.select2, the_array); }
function setOptionText(the_select, the_array) { //slet indholdet at select2 inde de nye ligges ind. no_in_select = the_select.options.length; for (loop=0; loop <= no_in_select; loop++) { the_select.remove(0); } //fyld select2 op med nye data for (loop=0; loop < the_array.length; loop++) { var oOption = document.createElement("OPTION"); oOption.text=the_array[loop]; the_select.add(oOption); } }
function udfyldSelect2() { setOptionText (window.document.booking.select2,<%=firstName%>); }
Altså det du gerne vil have, det er to select bokse, den ene med alle personalenumrene, og den anden med alle deres navne. Så vil du gerne have at når man skriver et nummer, f.eks 123, så går den hen til personalenummer 123. Når det er gjort, skal navnet så rulles frem i den anden select. Er det rigtigt forsået?
Jeg ved ikke om det har nogen betydning, men der kan være nogle af personalenumrene som er blevet slettet (eks. hvis personalenummer 114 ikke arbejder der mere så kan det nummer være blevet slettet)
1) Det skal faktisk ende ud med at brugeren skal kunne indtaste personalenummeret, hvorefter navnet på den pågældende person kommer frem. (det er de 2 selectmenuer vi arbejder med i øjeblikket)
2) I de situationer hvor brugeren ikke kan huske personalenummeret på en given person skal man kunne søge på navnet, hvorefter personalenummeret skal dukke op. (det er så 2 nye selectmenuer man skal bruge til det)
Det er punkt 1, som jeg håber at kunne få til at virke nu, men det er som om der mangler en "Onchangefunktion" eller noget i den stil til at skabe interaktionen mellem de 2 selectmenuer.
Hov, du skal skifte det her: Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../databaser/fagcenter.mdb") set rs = Server.CreateObject("ADODB.Recordset") sql = "SELECT * FROM ting" rs.Open sql, Conn, 3, 3 ud med: CONST adOpenStatic = 3, adLockReadOnly = 1, adCmdText = &H0001 Dim connectionString, CONN_USER, CONN_PASS Dim RecordSet Dim conn Dim strSQL Dim rs
connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("fagcenter.mdb") set rs = server.CreateObject("ADODB.Recordset") set rsSel2 = server.CreateObject("ADODB.Recordset")
set conn = server.CreateObject("ADODB.Connection")
conn.Open connectionString, CONN_USER, CONN_PASS
strSQL = "SELECT * FROM ting" set rs = conn.Execute (strSQL)
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.