webForumDet fria alternativet

2 selectlistor som listas från databas... få värde att stanna kvar

JavaScript

4 svar · 229 visningar · startad av brw

Medlem sedan juli 2000619 inlägg
Frågan#1

Jag har följande kod som listar fram grupper och sen undergrupp med namn.

Dvs om jag har gruppen:

Admin och väljer den så listas alla namn som finns med i gruppen admin osv.

Nu har jag problemet att när jag går in och redigerar en befintlig post så måste jag varje gång välja grupp och namn på nytt eftersom den inte kommer ihåg värdet.

Jag har ID-nummret på gruppid och userid om man kan använda det. Jag har lyckats få den att välja rätt grupp och göra den SELECTED men på namn var det lite svårare då den skrivs ut dynamiskt via nåt javascript.

Nån som har en idé på en lösning?

'befintliga värden om man redigerar posten

gruppid = RS("gruppid")
userid = RS("userid")

Set rsX = Server.CreateObject("ADODB.Recordset")

sQuery = "SELECT grupp.gruppnamn, users.name, " & _
    "grupp.Id AS gID, users.Id AS uID " & _
    "FROM users INNER JOIN grupp " & _
    "ON users.gruppid = grupp.Id " & _
	 "ORDER BY grupp.gruppnamn, users.name"

rsX.Open sQuery, Connection, adOpenForwardOnly, adLockReadOnly, adCmdText

If rsX.EOF Then
    Response.Write "Inga grupper.<BR>"
Else

    ' write the group listbox...

    Response.Write "<SELECT NAME=""group"" class=""formular"" ONCHANGE=""groupselected(this);"" >"
    Response.Write "<OPTION VALUE=0>Select group</OPTION>"

    ' write the entry code for the javascript...

    sJavaScript = "function groupselected(elem){" & vbCrlf & _
        "for (var i = document.f1.names." & _
        "options.length; i >= 0; i--){" & vbCrlf & _
        "document.f1.names.options[i] = null;" & _
        vbCrlf

    ' loop through the recordset...

    Do Until rsX.EOF

        ' is this a new bransch?
        If sLastbransch <> rsX("gruppnamn") Then

            ' if so, add an entry to the first listbox
            sLastbransch = rsX("gruppnamn")
            Response.Write "<OPTION VALUE=" & rsX("gID") & "" 
If RSx("gid") = groupid Then Response.Write " Selected" End If
Response.Write  ">" & sLastbransch & "</OPTION>"

            ' and add a new section to the javascript...
            sJavaScript = sJavaScript & "}" & vbCrlf & _
                "if (elem.options[elem.selectedIndex].value==" 

'If command <> "new" AND userid > 0 Then
'sJavaScript = sJavaScript & userid & "){" & vbCrlf

'Else
                sJavaScript = sJavaScript & rsX("gID") & "){" & vbCrlf
'End If

        sJavaScript = sJavaScript & _
		 "document.f1.names.options[document.f1.names.options.length] = new Option('Select name','0');" & _
	 	 vbCrlf

        End If

        ' and add a new nameline to the javascript...
                'sJavaScript = sJavaScript & _

 
        
        sJavaScript = VBCRLF & sJavaScript & _
            "document.f1.names.options[document." & _
            "f1.names.options.length] = new Option('" & _

            rsX("name") & "','" & rsX("uID") & "');" & _
vbCrlf
        rsX.MoveNext
    Loop

    ' finish the group listbox...
    Response.Write "</SELECT>"

    ' create the kategori listbox...

    Response.Write "&nbsp;&nbsp;&nbsp;<SELECT NAME=""names"" class=""formular"">"
    Response.Write "<OPTION value=""0"">Select name</OPTION>"
    Response.Write "</SELECT>"

    ' put the last line on the javascript and write it out...
    sJavaScript = sJavaScript & vbCrlf & "}" & vbCrlf & "}" & vbCrlf

    Response.Write "<SCR" & "IPT LANGUAGE=""JavaScript"">" & vbCrlf
    Response.Write sJavaScript & vbCrlf & "</SCR" & "IPT>" & vbCrlf
End If
rsX.Close
Set rsX = Nothing
Medlem sedan nov. 20017 144 inlägg
#2

Sätta en cookie kanske. Men då passar frågan kanske bättre under ASP-forumet. Klicka på "rapportera till moderatorn" och be honom flytta inlägget.

Medlem sedan juli 2000619 inlägg
#3

Mnja... jag tror inte kookie är rätt..

Man kan ju lägga till en ny dynamiskt med följande kod:

new Option('Urban','3');

Kan jag på något sätt typ tala om för den i tillägget att den skall vara selected.

typ:
new Option('Urban','3','SELECTED');

för då kan jag ju jämföra värdet när jag loopar fram och isf. tala om att det är den som skall vara selected.

Medlem sedan sep. 20021 655 inlägg
#4

Du kan ange att ett alternativt ska vara markerat så här:

new Option('Urban', '3', true, true);

http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/option.html

Medlem sedan juli 2000619 inlägg
#5

Tackar... nu fick jag den att fatta att rätt namn skall vara markerat men det fungerar inte riktigt bra än..

Nu måste jag välja gruppen 1 gång extra för att när jag rabblar upp från databasen så körs ju asp-koden före javascriptet

Nedan är koden som skrivs ut från databasen.
men på grupp så är ju Administratörer "Selected" men det fattar inte det undre scriptet utan jag måste välja "Test grupp" och sen välja tillbaka "Administratörer"
Då markeras "Allan Öhlund".. för när jag kommer in första gången så är Names-selectlisten tom.
funderar om om det går att köra nåt i stil med ONLOAD på första SELECT-listen typ:

<SELECT NAME="group" class="formular" ONLOAD="groupselected(this);" >

Men det fungerade inte...

<SELECT NAME="group" class="formular" ONCHANGE="groupselected(this);" >
<OPTION VALUE=0>Select group</OPTION>
<OPTION VALUE=1 Selected>Administratörer</OPTION>
<OPTION VALUE=4>Test grupp</OPTION></SELECT>&nbsp;&nbsp;&nbsp;

<SELECT NAME="names" class="formular">
<OPTION value="0">Select name</OPTION></SELECT>

<SCRIPT LANGUAGE="JavaScript">

function groupselected(elem){
for (var i = document.f1.names.options.length; i >= 0; i--){
document.f1.names.options[i] = null;
}
if (elem.options[elem.selectedIndex].value==1){
document.f1.names.options[document.f1.names.options.length] = new Option('Select name','0');
document.f1.names.options[document.f1.names.options.length] = new Option('Administrator','1');
document.f1.names.options[document.f1.names.options.length] = new Option('Allan Öhlund','2', true, true);

}
if (elem.options[elem.selectedIndex].value==4){
document.f1.names.options[document.f1.names.options.length] = new Option('Select name','0');
document.f1.names.options[document.f1.names.options.length] = new Option('Lennart Svensson','4');

}
}

</SCRIPT>
259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)