Jag har ett problem med en listbox. I databasen ligger där en tabell som heter Tidtyp. Tidtyp innehåller TidtypID och Tidtypnamn. Dessa hämtas på en ASP-sida som "loopar" ut dem i en listbox, och "loopen" ser samtidigt efter ifall TidtypID stämmer överens med ett annat värde som innehåller Tidtypen för det projektet. Det går bra första gången sidan laddas upp, och rätt Tidtypsnamn blir valt. Men när man sedan ska tex ge ett felmeddelande på sidan så laddas inte listboxen upp igen, och får därmed inget förvalt alternativ. Finns det något sätt att få listboxen att laddas upp igen, eller något annat sätt i VBScript som gör att man kan sätta vilken post av de inlagda som ska vara vald? <code> Att sidan inte laddas om, utan att jag har ett strängvärde längst ner på sidan som berättar vad man gjorde för fel när man fyllde i formuläret. Detta strängvärde ändras alltså beroende på vilket fel man gjorde när man fyllde i formuläret (tex glömde fylla i en obligatorisk ruta). Hm... jag förstår fortfarande inte riktigt... Kan du kopiera in html-koden från webbläsaren då? Se till att få med form-taggarna bara... och om du har en massa extra kod så kan du ta bort den... Hmm... det är svårt att förklara detta här :) Alltså: Vad du vill göra är att sätta listboxen till det alternativ som den hade innan man försökte skicka upp den och misslyckades? Eller? Lägg indexet för det valda alternativet (börjar på 0) i en javascript variabel... Var ska denna kod ligga? Där SELECT-menyn skapas? Det där är det som skall skrivas ut... Så jag ska ersätta min kod med koden du skrev där? Den koden ska ligga där min listboxkod låg innan? Ersätta å ersätta, du skall ha med den där räknar variabeln och sätta en javascript variabel som jag hade i min exempelloop. :) Jag förstår hur du har tänkt att den skall fungera nu iallafall. Jag hade inte koll på hur du skulle kolla ifall den är selected, så du skall byta ut den mot den riktiga if-satsen... Man kan inte göra på något annat sätt? Utan Javascript? Det finns inget sätt att genom VBScript bara ändra vilken OPTION som ska vara SEEECTED? Så du menar att jag kan använda tex den klassiska javascriptfunktioner:Ladda om listboxen?
Det här blev krångligt. Det jag behöver är någonting som sätter ett "default"-värde i en redan uppladdad listbox.Sv: Ladda om listboxen?
("DataB") = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database/db.mdb") & ";Persist Security Info=False"
<SELECT NAME="selKundOchProjekt" STYLE="FONT=10">
<%SQL = "SELECT Projektnr FROM Projekt ORDER BY Kundnr"
set EkaDB = server.CreateObject("ADODB.recordset")
EkaDB.Open SQL,Application("DataB"),3
If Not EkaDB.eof Then
Do Until EkaDB.eof%>
<OPTION VALUE="<%=EkaDB("Projektnr")%>" <%If EkaDB("Projektnr") = Projektnr Then%>SELECTED<%End If%>><%=GetCustomerAndProjectNameByProjectID(EkaDB("Projektnr"))%></OPTION>
<%EkaDB.MoveNext
Loop
End If
EkaDB.Close
set EkaDB = nothing
</SELECT>
</code>
Tror det var allt. Funktionen GetCustomerAndProjectNameByProjectID är oviktig här, så jag har inte inkluderat den.Sv: Ladda om listboxen?
Sv: Ladda om listboxen?
Jag förstår inte riktigt varför listboxen inte skulle skickas med...Sv: Ladda om listboxen?
Jag sitter på fel dator, så jag har tyvärr ingen möjlighet att visa HTML-koden just nu. Jag tror faktiskt inte att det behövs, om du bara förstår mitt problem. Jag ska försöka förklara det hela grundligt:
Man länkas till sidan med en querystring som antingen innehåller ett idnr eller ordet "new". Om den har ett idnr, ska detta idnr hämtas ur databasen och poster som hade det idnr:et läggas in som "default"-värden i formuläret. Man får sedan tre alternativ i form av submitknappar längst ner på sidan: Uppdatera, Ta bort eller Tillbaka. Om man trycker på Uppdatera, uppdateras den specifika posten (med det idnr:et) med den nya informationen från formuläret. Men innan den uppdaterar posten kollas alla textfält och liknande i formuläret så att man inte har skrivit in ett otillåtet värde (text i ett nummerfält etc) och så att alla obligatoriska fält är ifyllda. Om den hittar ett fel, lagras det felet i en variabel kallad msgError (msgError kan alltså vara 'msgError = "Du måste skriva in antalet timmar."'). Detta meddelande visas sedan längst ner på sidan och posten uppdateras inte förrän man har rättat till felet. Men eftersom sidan inte laddas om så laddas inte en enda listbox upp på nytt, vilket medför att den inte kör loopen (som fanns i tidigare inlägg), och därmed inte kollar vilken av de olika valen (OPTION) som ska vara vald från början. Första gången sidan visas, visas även rätt val (OPTION). Men inte sen, eftersom sidan inte laddas om.
Kastade detta lite ljus över vilket problem jag har? Om inte så ska jag försöka fixa HTML-koden som du ville ha...Sv: Ladda om listboxen?
Sv: Ladda om listboxen?
<code>
response.write "<select id=""blaha"">"
dim i
dim h
h = 0
i=0
do while not rs.eof
response.write "<option value=""" & rs("kossa") & """"
if DEN_HÄR_SKA_VARA_MARKERAD then
response.write " selected"
end if
response.write ">" & rs("kossa") & "</option>"
i = i + 1
loop
response.write "</select>"
response.write "<script type=""text/javascript"">var t_Start='" & cstr(h) & "';</script>"
</code>
Sedan där det skall återställas i javascriptet:
document.getElementById("blaha").selectIndex=t_Start;Sv: Ladda om listboxen?
Vad menar du medd att jag ska lägga det i en javascriptvariabel?
Går inte detta att göra direkt i VBScript utan Jscript?Sv: Ladda om listboxen?
Och varför kör du vbscript? du kan ju bara internet explorer användare använda hemsidan?Sv: Ladda om listboxen?
Jag använder VBScript för att det är smidigast och för att jag kunde det innan.Sv: Ladda om listboxen?
Sv: Ladda om listboxen?
Men jag förstår inte detta:
<code>
if DEN_HAR_SKA_VARA_MARKERAD then
</code>
Vad är det för if-sats egentligen? Inte "= true" eller "= 1" utan bara "then"?
Har inte stött på det innan, tror jag inte. Om du nu inte bara skrev fel?Sv: Ladda om listboxen?
Sv: Ladda om listboxen?
Förresten, tack för all hjälp, även om jag inte fått det att fungera än ;)Sv: Ladda om listboxen?
<code>
document.getElementById("ettnamn").style.top=50
</code>
I vbscript också? Eller menar du endast koden du gjorde?
Ska jag ta bort <SCRIPT>taggarna också?