Avatar billede crapman Nybegynder
23. marts 2004 - 09:20 Der er 48 kommentarer og
1 løsning

Select der udvides

Hejsa, jeg har en select box på et intranet, hvor man først ser en liste over de medarbejdere der er i ens afdeling... Hvis man klikker på "Vis alle" neders i boxen, så skal den udvides, sådan at man ser ALLE medarbejdere i firmaet....

Nogle der kan greje den???? Der er mange point at hente, da det haster MEGET....

her er koden til den select der er nu...



<select name="ansvarlig" style="Border = solid; Border-width = 1; Border-color: #000000; FONT-FAMILY: verdana; FONT-SIZE: 11px; background: #ffffff;">
<%
set rs = conn.execute("select * from brugere WHERE afdeling = '"&mwuser("afdeling")&"' ORDER BY fornavn")

do while not rs.eof

    response.write "<option value="""&rs("id")&""">"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"</option>"

rs.movenext
loop
response.write "<option value=""alle"">Vis alle</option>"
%>
</select>
Avatar billede mm12010 Nybegynder
23. marts 2004 - 09:28 #1
sådan?

<select name="ansvarlig" style="Border = solid; Border-width = 1; Border-color: #000000; FONT-FAMILY: verdana; FONT-SIZE: 11px; background: #ffffff;" onchange="if(this.value='alle')location.href+='?showall='+this.value">
<%
If Request.QueryString("showall")="alle" Then
  set rs = conn.execute("select * from brugere ORDER BY fornavn")
Else
  set rs = conn.execute("select * from brugere WHERE afdeling = '"&mwuser("afdeling")&"' ORDER BY fornavn")
End If

do while not rs.eof

    response.write "<option value="""&rs("id")&""">"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"</option>"

rs.movenext
loop
response.write "<option value=""alle"">Vis alle</option>"
Avatar billede crapman Nybegynder
23. marts 2004 - 09:30 #2
ja, det virker da... men, det ville være federe hvis det kunne lade sig gøre UDEN at skulle loade siden igen, da alle de værdier man så har indtastet i formen mistes... kan det lade sig gøre??? Evt. ved at loade alle medarbejderne ind i scriptet???
Avatar billede nute Nybegynder
23. marts 2004 - 09:31 #3
crapman >> antal points skal ikke afspejle hvor desperat man er efter et svar ... det skal afspejle hvor svært spørgsmålet er ;-)
Avatar billede crapman Nybegynder
23. marts 2004 - 09:32 #4
Nute... jamen så er spørgsmålet meget svært! :)
Avatar billede nute Nybegynder
23. marts 2004 - 09:50 #5
crapman >> dette er *ikke* en "næsten 3 gange så svær som en 'svær' opgave" (som er værd 60 points. Med *lidt* javascript kundskaber kan denne opgave løses på 15 minutter:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
    <script language="JavaScript" type="text/javascript">
    <!--
    var g_arrEmployee      = new Array();
    var g_arrDept        = new Array();
    var g_strDept        = "<%= mwuser("afdeling") %>";
    <%
    set rs = conn.execute("select * from brugere WHERE" )' afdeling = '"&mwuser("afdeling")&"' ORDER BY fornavn")
    do while not rs.eof
        %>
        g_arrEmployee[ g_arrEmployee.length - 1 ] = "<%= rs("id") & "¤" & rs("fornavn") & " " & rs("efternavn") %>";
        g_arrDept[ g_arrDept.length - 1 ] = "<%= rs("afdeling") %>";
        <%
        rs.movenext
    loop
    %>
   
    function init()
    {
        var objSelect = document.getElementById( "ansvarlig" );
        objSelect.options.length = 0;
       
        for( i = 0; i < g_arrDept.length; i++ )
        {
           
            if( g_strDept == -1 || g_arrDept[ i ] == g_strDept )
            {
                var strID    = g_arrEmployee[ i ].split("¤")[0];
                var strEmpl = g_arrEmployee[ i ].split("¤")[1];
                var objOption = new Option( strEmpl, strID );
                objSelect.add( objOption );
            }
        }
        var objOption = new Option( "Vis Alle", -1 );
        objSelect.add( objOption );
    }
    function changeSelect( objSelect )
    {
        if( objSelect.selectedIndex == objSelect.options.length-1 )
        {
            g_strDept = -1;
            init();
        }
    }
    //-->
    </script>
</head>

<body onload="init();">
<select name="ansvarlig" style="Border = solid; Border-width = 1; Border-color: #000000; FONT-FAMILY: verdana; FONT-SIZE: 11px; background: #ffffff;" onchange="changeSelect( this );">
</select>

</body>
</html>

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 09:52 #6
jajaja... men javascript kundskaber har jeg absolut ikke.... er helt hjernedød til det... nå, jeg prøver lige :)
Avatar billede crapman Nybegynder
23. marts 2004 - 09:53 #7
Hmm, kan det evt. lade sig gøre at undgå at smide noget i head og body-tagget...?? Sådan af hensyn til sidens opbygning
Avatar billede nute Nybegynder
23. marts 2004 - 09:58 #8
crapman >> igen ... antal points skal afspejle spørgsmålets sværhedsgrad ... ;o]

"af hensyn til sidens opbygning" ???? Det er da ligemeget om det ligger noget i <head>. Hvis du vil have noget javascript, så *skal* dette placeres i <head> tagget. Og hvis du kigger efter, så har jeg ikke smidt en eneste linie kode i <body> tagget.

Du kan se hvordan det kommer til at blive, her:

http://xperimentum.com/xperten/480737/index.html

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 10:00 #9
Jo, det har en heeeeel del betydning, da siden er bygget op omkring en default fil med en række includes...

...og du har da en onload"init();" i body-tagget???
Avatar billede nute Nybegynder
23. marts 2004 - 10:10 #10
oki ... smid hele javascriptet i en asp. fil (*uden* <script> tagsene)

i bunden af denne fil, så skriver du:

window.onload = init;

denne fil inkluderer du så på din side, med:

<script language="JavaScript" type="text/javascript" src="[navnet på filen].asp"></script>

/nute
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:15 #11
<select id="ansvar" name="ansvarlig" style="Border = solid; Border-width = 1; Border-color: #000000; FONT-FAMILY: verdana; FONT-SIZE: 11px; background: #ffffff;" onchange="if(this.value=='alle') fillSel(this);">
<script language="javascript" type="text/javascript">
function fillSel(sel){
users=new Array();
<%
set rs = conn.execute("select * from brugere WHERE afdeling <> '"&mwuser("afdeling")&"' ORDER BY fornavn")
i=0
do while not rs.eof
  response.write "users["&i&"]='"&rs("id")&"|"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"';"
  i=i+1
rs.movenext
loop
%>
  var newSel=document.getElementById('ansvar');
  for(i=0;i<users.length;i++){
    u=users[i].split("|");
    newOpt=document.createElement('OPTION');
    newSel.appendChild(newOpt);
    newOpt.text=u[1];
    newOpt.value=u[0];
    newOpt.selected=false;
    }
}
</script>
<%
set rs = conn.execute("select * from brugere WHERE afdeling = '"&mwuser("afdeling")&"' ORDER BY fornavn")
do while not rs.eof
    response.write "<option value="""&rs("id")&""">"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"</option>"
rs.movenext
loop
response.write "<option value=""alle"">Vis alle</option>"
%>
</select>
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:16 #12
Avatar billede nute Nybegynder
23. marts 2004 - 10:24 #13
mm12010 >> ehh ... hvordan får du så "alle" frem ?? *me don't see*
Avatar billede crapman Nybegynder
23. marts 2004 - 10:25 #14
Yups... mm12010s svar virkede med det samme... Nute's gav bare nogle tomme felter...(?)...

Anyway, tak for hjælpen til alle :)

Og så må mm12010 vidst hellere smide et svar
Avatar billede crapman Nybegynder
23. marts 2004 - 10:30 #15
......ihhh altså hvor hader jeg mac lige nu... det virker self. hverken i os9 eller osx... :(
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:31 #16
selv tak :o)

nute >> hvad mener du med 'alle'?
Avatar billede nute Nybegynder
23. marts 2004 - 10:32 #17
crapman >> så må du have gjort noget forkert ;-)

men jeg troede du ikke ville have noget kode i dit body tag "af hensyn til opbygningen af siden" ?? Det er noget jeg ikke forstår ... mm12010 sin kode (no offence mm12010) fylder jo meget i body tagget.

/nute
Avatar billede nute Nybegynder
23. marts 2004 - 10:33 #18
mm12010 >> din 'vis alle' funktion ... hvordan får du vist alle medarbejdere i din dropdown ... det kan jeg simpelthen ikke se ... :|
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:35 #19
1) jeg trorede han mente at han ikke ville have noget alá: <body onload="..."

2) jeg tilføjer nye options for hvert element i users-arrayet med: newOpt=document.createElement('OPTION');
Avatar billede crapman Nybegynder
23. marts 2004 - 10:37 #20
Yups... jeg skrev i body-TAGGET... Dvs i selve <body onload=".....> Ikke i selve body'en....

Nogle der har en idé om hvorfor mm12010's version ikke virker på mac, og hvorfor der kun kommer en masse tomme options i nute's version?
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:37 #21
har lige testet på Mac osX og Safari 1.2 og der fungerer det fint
Avatar billede nute Nybegynder
23. marts 2004 - 10:38 #22
mm12010 >> jo ... det kan jeg se ;o]

men du bruger "select * from brugere WHERE afdeling <> '"&mwuser("afdeling")&"' ORDER BY fornavn" ... denne henter jo ud alle medarbejdere der *ikke* er med i den afdeling der bliver forespurgt. Med andre ord, så vil din select indeholde *enten* de medarbejdere der er i afdelingen, eller dem der *ikke* er med i afdelingen ... den ene select udelukker den anden. Eller er det noget jeg ikke har forstået med din kode ??

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 10:38 #23
..ohh sorry.. det er så ie på mac osx og mac os 9x, jeg har testet på...
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:42 #24
fra start indeholder min select jo alle de poster WHERE afdeling = '"&mwuser("afdeling")&"'

dvs vil jo sige at jeg kun skal tilføje alle dem WHERE afdeling <> '"&mwuser("afdeling")&"' for at have alle poster fra tabellen

'dem der er lig med'+'dem der ikke er lig med'=alle ;-)
Avatar billede nute Nybegynder
23. marts 2004 - 10:43 #25
crapman >> har du prøvet at køre mit script i den originale form ? uden at lægge det ind i et eksternt script ? (( selv om det egentlig ikke er noget point i at "supportere" mit forslag hvis det alligevel ikke bliver brugt ;o] )). mm12010 har en pointe med at bruge 'createElement' istedet for 'Option', men jeg har ikke mulighed for at teste på mac. En hurtig test på Mozilla viser dog at 'option' løsningen nok ikke var den smarteste at bruge.

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 10:45 #26
Nute.. Jeg prøver lige engang... øjeblik så ser vi!
Avatar billede nute Nybegynder
23. marts 2004 - 10:45 #27
mm12010 >> *klask* ... jeg var sikker på at du nulstillet din select :-)

det bliver jo så en usorteret liste:

Anders (afdeling 1)
Birger (afdeling 1)
Carl (afdeling 1)
Anna (afdeling 2)
Bent (afdeling 3)

osv ...

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 10:47 #28
Hmm nute.. virker stadig ikke... http://intranet.wiegaarden.dk/test.asp
Avatar billede crapman Nybegynder
23. marts 2004 - 10:49 #29
Nå, jeg accepterer mm12010's svar og tvinger mine mac-brugere til at bruge safari ;)
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:51 #30
Avatar billede nute Nybegynder
23. marts 2004 - 10:51 #31
det var dét jeg tænkte:

Type mismatch: 'mwuser'
/test.asp, line 10

denne linie, i dit/mit script:

var g_strDept        = "<%= mwuser("afdeling") %>";

skal skiftes ud. Jeg ved ikke hvordan du får fat i din afdeling. Denne værdi kunne jo eventuelt sættes *efter* du har åbnet 'mwuser' recordset'et (som jeg antager at 'mwuser' er ?? )

/nute
Avatar billede mm12010 Nybegynder
23. marts 2004 - 10:53 #32
denne er nok lidt hurtigere:

http://uniquem.dk/exp/asp/480737.asp
Avatar billede nute Nybegynder
23. marts 2004 - 10:55 #33
mm12010 >> nu skal det helst ikke gå for meget konkurrance i dette, men ... hvad nu hvis man pludselig vil vise medarbejdere for én afdeling igen ? Så må din side submittes.

Og en lille pæn 'feature' i din select, ville være at lægge

newSel.options.length--;

lige inden din loop, for at fjerne 'Vis Alle' option når alle er vist :-]

/nute
Avatar billede mm12010 Nybegynder
23. marts 2004 - 11:00 #34
det kan der være noget om ;-)

man kunne også klare det på en helt anden måde som både ville løse det, sorteringen og Mac/IE-problemmet:

http://uniquem.dk/exp/asp/480737.asp
Avatar billede crapman Nybegynder
23. marts 2004 - 11:04 #35
Ehhhhh mm.. den der sidste en du gav, viser 2 selects i ie på pc, men 3 selects i ie på mac.... og virker på en helt mystisk måde...
Avatar billede mm12010 Nybegynder
23. marts 2004 - 11:06 #36
sådan - det var din css der lige skulle rettes lidt ;-)
Avatar billede nute Nybegynder
23. marts 2004 - 11:07 #37
mm12010 >> din select nummer 2, ser da meget pæn ud :-)

hvis jeg må "brokke" mig endnu mere ... hvis du har implementeret denne select på samme måde som dit første forslag, så fyrer du 2 selects af ? en for at hænte afdeling, og én for at hænte "de andre" ?

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 11:07 #38
Jajaja, se nu virker den... :D

Men hvordan mixer man den så op med lidt asp... er som sagt stadig 100% spade til javascript, og har ingen anelse om hvor jeg må pille og hvor jeg ik må...
Avatar billede mm12010 Nybegynder
23. marts 2004 - 11:21 #39
sådan - en select for hente afdeling, og en for at sorteringen bliver rigtig, men de bruger samme recordset:


<select id="ansvarAll" name="ansvarlig1" onchange="if(this.value=='alle'){document.getElementById('ansvarShow').style.display='inline';this.style.display='none'}" style="border:1px solid black;font-family:verdana;font-size:11px;background-color:#ffffff;">
<%
set rs = conn.execute("select * from brugere ORDER BY fornavn")
do while not rs.eof
  if rs("afdeling")=mwuser("afdeling") then
    response.write "<option value="""&rs("id")&""">"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"</option>"
  end if
rs.movenext
loop
response.write "<option value=""alle"">Vis alle</option>"
%>
</select>
<select id="ansvarShow" name="ansvarlig2" onchange="if(this.value=='afdeling'){document.getElementById('ansvarAll').style.display='inline';this.style.display='none'}" style="display:none;border:1px solid black;font-family:verdana;font-size:11px;background-color:#ffffff;">
<%
rs.movefirst
do while not rs.eof
    response.write "<option value="""&rs("id")&""">"&rs("fornavn")&"&nbsp;"&rs("efternavn")&"</option>"
rs.movenext
loop
response.write "<option value=""afdeling"">Vis afdeling</option>"
%>
Avatar billede nute Nybegynder
23. marts 2004 - 11:28 #40
mm12010 >> så er jeg godt tilfreds med din løsning :-D

nice one ... ;o]

/nute
Avatar billede nute Nybegynder
23. marts 2004 - 11:34 #41
eller ... problemet bliver jo så, siden du viser og skjuler dine selects, at hvis man skal requeste hvem der er valgt, så skal man tage hensyn til 2 selects i stedet for 1. man bliver så nødt til at lave sine checks:

if( Request( "ansvarlig1" ) = 'alle' ) then
    brug Request("ansvarlig 2")
...

;o]

/nute
Avatar billede crapman Nybegynder
23. marts 2004 - 11:52 #42
Ja nu virker det
Avatar billede mm12010 Nybegynder
23. marts 2004 - 12:32 #43
nute >> det er må jo så være et temperamentsspørgsmål hvilken man vælger, der er +'er og -'er for begge, men personligt ville jeg nok tage den sidste ;-)
Avatar billede nute Nybegynder
23. marts 2004 - 12:43 #44
mm12010 >> jow, det er det nok. kan bare ikke undlade at pointere de ting jeg finder "mystisk"/"uhensigtsmæssig"/"ikke tilstrækkelig" i *mine* øjne - ikke for at finde fejl i en anden løsning. Jeg mener stadig at den bedste løsning afstammer fra flere mindre forslag - men hvis ikke nogen synes mine observationer er relevante, så håber jeg de beder mig om at lukke :-)

/nute
Avatar billede mm12010 Nybegynder
23. marts 2004 - 12:50 #45
det er altid rart få andres(især når de er konstruktive;-) meninger om sine forslag/løsninger !-)

hvad mener du?-)
CITAT:"Jeg mener stadig at den bedste løsning afstammer fra flere mindre forslag"
Avatar billede nute Nybegynder
23. marts 2004 - 13:02 #46
mm12010 >> oki, det er måske mine manglende dansk kundskaber der skaber en underlig konstruktion/setning :-)

Det jeg mener, er at man opnår den bedste løsning, når mange sætter sine kreative hoveder sammen, for at løse en opgave. Den ene person kan se problemstillingen på en anden måde end en anden person, og allerede her har løsningen blevet styrket :-)

/nute
Avatar billede mm12010 Nybegynder
23. marts 2004 - 13:10 #47
ganske enig !-)
Avatar billede crapman Nybegynder
23. marts 2004 - 13:13 #48
...og det er hvad der gør experten til det ideelle sted...
Avatar billede nute Nybegynder
23. marts 2004 - 13:21 #49
perfektamento

:-]
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