Avatar billede kagge Nybegynder
18. juli 2002 - 10:03 Der er 28 kommentarer og
1 løsning

Søgning i selectmenu

Hvis man har en lang selectmenu med f.eks. personalenumre fra 1 - 1100.....

<SELECT NAME="Test">
  <OPTION VALUE=""></OPTION>
  <OPTION VALUE="person 1">1</OPTION>
  <OPTION VALUE="person 2">2</OPTION>
  <OPTION VALUE="person 3">3</OPTION>
  <OPTION VALUE="person 4">4</OPTION>
  <OPTION VALUE="person 5">5</OPTION>
  <OPTION VALUE="person 6">6</OPTION>
</select>

osv osv...

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..

Håber der er nogle som kan hjælpe
Avatar billede pelkjaer Nybegynder
18. juli 2002 - 10:14 #1
Det gør den da allerede nu.
Når den er valgt, og man trykker 6, hopper den ned til 6
Avatar billede kagge Nybegynder
18. juli 2002 - 10:39 #2
jamen der går ged i det når man f.eks. indtaster 127
Avatar billede mikoalngelo Nybegynder
18. juli 2002 - 10:43 #3
så skal man bare trykke 1 en masse gange
Avatar billede kagge Nybegynder
18. juli 2002 - 10:49 #4
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...
Avatar billede ras2000 Nybegynder
18. juli 2002 - 12:12 #5
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>

</html>
Avatar billede ras2000 Nybegynder
18. juli 2002 - 12:24 #6
Denne er lidt fiksere, men stadig langsom.
<html>
<head>
<script type="text/javascript">
strengen = "";
function findden(tal){
    strengen += tal;
    for (a=0;a<document.noget.test.all.length;a++){
        if (document.noget.test.all[a].innerText == strengen) document.noget.test.all[a].selected = true;
    }
}
</script>
</head>
<body>
<form name="noget">
<select name="test" onKeyUp="if(window.event.keyCode < 58 && window.event.keyCode > 47) findden(window.event.keyCode - 48)" onblur="strengen=''">
<%
for a = 0 to 1100
    response.write "<option value='person " & a & "'>" & a & "</option>"
next
%>
</select>
</form>
</body>

</html>
Avatar billede ras2000 Nybegynder
18. juli 2002 - 12:26 #7
Hvis du ikke er inde i asp, så er det mellem <% og %> noget kode som genererer alle options op til 1100.
Avatar billede kagge Nybegynder
18. juli 2002 - 12:54 #8
-> ras2000

Jeg får nok ikke tid til at afprøve det i dag, men jeg vender lige tilbage i morgen formiddag.

Du skal jo lige have nogle point, hvis det fungerer...

Men foreløbig tak.
Avatar billede kagge Nybegynder
19. juli 2002 - 10:38 #9
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.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 10:43 #10
Lad os lige få det til at fungere først. Kan du ikke poste lidt af koden ved din select boks, som den bliver genereret af dit databaseudtræk?
Avatar billede kagge Nybegynder
19. juli 2002 - 11:05 #11
Jo jeg prøver lige at smide koden op, men det er nok lidt svært at forstå...
Avatar billede kagge Nybegynder
19. juli 2002 - 11:11 #12
Lige en lille forklaring:

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%>);
}



<select name="select1"
  onChange="opdaterSelect2(window.document.booking.select1.options[selectedIndex].value);">
  <%=select1Options%>
</select>

<select name="select2">
</select>
Avatar billede ras2000 Nybegynder
19. juli 2002 - 11:17 #13
Uh, det var en indviklet måde at gøre det på. Hvorfor får du ikke bare asp til at generere din select? g hvad med dine body og script tags?
Avatar billede kagge Nybegynder
19. juli 2002 - 11:23 #14
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%>);
}

-->


</SCRIPT>
</HEAD>

<BODY onload="udfyldSelect2()" bgcolor="lightsteelblue" marginwidth=20 leftmargin=20>
<P>
  <FORM NAME="booking" ACTION="indexgodk.asp" METHOD="post">


<select name="select1"
  onChange="opdaterSelect2(window.document.booking.select1.options[selectedIndex].value);">
  <%=select1Options%>
</select>

<select name="select2">
</select>
Avatar billede ras2000 Nybegynder
19. juli 2002 - 11:31 #15
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?
Avatar billede kagge Nybegynder
19. juli 2002 - 11:45 #16
Helt korrekt forstået. Du skal nok få nogle flere point, hvis det er noget du kan hitte ud af...
Avatar billede kagge Nybegynder
19. juli 2002 - 11:56 #17
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)
Avatar billede ras2000 Nybegynder
19. juli 2002 - 12:05 #18
Det skulle ikke være et problem.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 12:20 #19
<html>
<head>
<title>halløjsa</title>
<script type="text/javascript">
strengen = "";
function findden(tal){
    strengen += tal;
    for (a=0;a<document.noget.test1.all.length;a++){
        if (document.noget.test1.all[a].innerText == strengen) document.noget.test1.all[a].selected = true;
    }
    for (a=0;a<document.noget.test2.all.length;a++){
        if (document.noget.test2.all[a].value == strengen) document.noget.test2.all[a].selected = true;
    }
}
</script>
</head>
<BODY bgcolor="lightsteelblue" marginwidth=20 leftmargin=20>
<form name="noget">
<select name="test1" onKeyUp="if(window.event.keyCode < 58 && window.event.keyCode > 47) findden(window.event.keyCode - 48)" onblur="strengen=''">
<%
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)
do while not rs.eof
%>
<option value="<%=rs(1)%>"><%=rs(0)%></option>
<%
rs.movenext
loop
%>
</select>
<select name="test2" onfocus="strengen=''">
<%
rs.movefirst
do while not rs.eof
%>
<option value="<%=rs(0)%>"><%=rs(1)%></option>
<%
rs.movenext
loop
%>
</select>
</form>
</body>
</html>
Avatar billede kagge Nybegynder
19. juli 2002 - 13:39 #20
Nu er der ingen forbindelse imellem de 2 selectmenuer...

Når jeg vælger personalenummer i den første selectmenu så bliver den anden bare stående....

Ved du hvad der ka være galt?
Avatar billede ras2000 Nybegynder
19. juli 2002 - 13:45 #21
I din select har du value="personens navn". Skal den være sådan? Det ville være nemmere hvis du satte value="personID".
Avatar billede kagge Nybegynder
19. juli 2002 - 14:03 #22
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.
Avatar billede ras2000 Nybegynder
19. juli 2002 - 14:03 #23
Nu skulle den gerne virke.
<html>
<head>
<title>halløjsa</title>
<script type="text/javascript">
strengen = "";
function findden(tal){
    strengen += tal;
    for (a=0;a<document.noget.test1.all.length;a++){
        if (document.noget.test1.all[a].innerText == strengen) document.noget.test1.all[a].selected = true;
    }
    for (a=0;a<document.noget.test2.all.length;a++){
        if (document.noget.test2.all[a].value == strengen) document.noget.test2.all[a].selected = true;
    }
}
function finddenanden(tal){
    document.noget.test2.selectedIndex = tal;
}
</script>
</head>
<BODY bgcolor="lightsteelblue" marginwidth=20 leftmargin=20>
<form name="noget">
<select name="test1" onKeyUp="if(window.event.keyCode < 58 && window.event.keyCode > 47) findden(window.event.keyCode - 48)" onblur="strengen=''" onChange="finddenanden(this.selectedIndex)">
<%
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
do while not rs.eof
%>
<option value="<%=rs(1)%>"><%=rs(0)%></option>
<%
rs.movenext
loop
%>
</select>
<select name="test2" onfocus="strengen=''" onchange="findden(this.value)">
<%
rs.movefirst
do while not rs.eof
%>
<option value="<%=rs(0)%>"><%=rs(1)%></option>
<%
rs.movenext
loop
%>
</select>
</form>
</body>
</html>
Avatar billede ras2000 Nybegynder
19. juli 2002 - 14:04 #24
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)
Avatar billede kagge Nybegynder
19. juli 2002 - 14:22 #25
Så virker det.... Mange tak skal du have. Hvor mange point vil du have for din arbejdsindsats?
Avatar billede ras2000 Nybegynder
19. juli 2002 - 14:26 #26
De 30 er fint. Har du selv forstået hvad der sker?
Avatar billede kagge Nybegynder
19. juli 2002 - 14:36 #27
Jeg tror nogenlunde jeg kan forstå hvad der sker
Avatar billede ras2000 Nybegynder
19. juli 2002 - 14:40 #28
Cool. Jamen så held og lykke med det.
Avatar billede kagge Nybegynder
19. juli 2002 - 14:42 #29
jo tak
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