23. marts 2004 - 09:20Der 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")
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
<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
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???
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>
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.
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.
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 ??
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.
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 ?? )
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 :-]
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" ?
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å...
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")&" "&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")&" "&rs("efternavn")&"</option>" rs.movenext loop response.write "<option value=""afdeling"">Vis afdeling</option>" %>
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") ...
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 ;-)
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 :-)
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 :-)
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.