Og længer oppe i dokumentet har jeg denne linje: Set rs = Conn.Execute("SELECT data FROM data Where data="""" ORDER BY Data")
Som i kan se mangler jeg noget i Where data="""" som jeg skrev ovenover. Jeg vil gerne at hvis man vælger 1 oppe i selectboxen så kommer der til at står where data=""1"".
Jeg har postet spørgsmålet i ASP tråden men kunne hurtigt se at det hørte til her.
Altså når man vælger I select boksen skal siden opdateres og sende skrive where data=""[Valg]"" [Valg] = det valgte tal i selectboksen.
Dette spørgsmål er faktisk en af den sjældne slags som er både ASP og JavaScript. ASP-scriptet skal nemlig ikke bare skrive JavaScript-koden ud, men den skal faktisk beregne hvordan JavaScript-koden skal se ud.
For at løse problemet er vi dog nødt til at starte med JavaScript-koden. Det at lade indholdet af en select afhænge dynamisk af valget i en anden kan f.eks. laves sådan her:
<script type='text/javascript'> function sync(val) { switch (val) { case '1' : setWhere1(); break; case '2' : setWhere2(); break; case '3' : setWhere3(); break; case '4' : setWhere4(); break; case '5' : setWhere5(); break; case '6' : setWhere6(); break; case '7' : setWhere7(); break; default : break; } }
function setWhere1() { elm = document.getElementById('valg2'); elm.options.length = 0;
elm.options[0] = new Option("A", "1"); elm.options[1] = new Option("B", "2");
elm.options[0].selected = true;
}
function setWhere2() { elm = document.getElementById('valg2'); elm.options.length = 0;
elm.options[0] = new Option("C", "3"); elm.options[1] = new Option("D", "4"); elm.options[2] = new Option("E", "5");
ASP-koden skal altså først udskrive alle case'ene i switch sætningen.
Derefter skal den lave et antal setWhereX funktioner – en pr. case. Indholdet af disse skal variere med det der skal fyldes i select #2. Dette afhænger af hvad der står i databasen.
Synes godt om
Slettet bruger
20. august 2005 - 11:04#7
Ok i må undskylde det tog så lang tid men skulle lige skrive det endelige dokument hvor det skulle bruges i.
Det er den øverste selectboks der skal vælg where ---------------------------------------------------
<% %><!--#include file="db_open.asp"--><%
Set rs = Conn.Execute("SELECT Teamname FROM Liga_Teams Where Liga=""1"" and season=""26"" ORDER BY Teamname")
Dim TeamStr TeamStr = ""
Do While Not rs.EOF If (TeamStr <> "") Then TeamStr = TeamStr & "|" TeamStr = TeamStr & rs("teamname") rs.MoveNext Loop
Når du vælger en option i din første select, skal den anden select konstrueres sådan at den passer med det valgte. Det er netop hvad koden gør:
// Vi finder først select nr. 2 - den har fået id'et 'valg2'. elm = document.getElementById('valg2');
// Slet de options der står i den. elm.options.length = 0;
// Tilføj nogle nye options - her to stk. elm.options[0] = new Option("A", "1"); elm.options[1] = new Option("B", "2");
// Sæt den første option til at være den der er valgt lige nu. elm.options[0].selected = true;
Synes godt om
Slettet bruger
20. august 2005 - 14:35#15
OK 2 spørgsmål
Hvorfor har du så C, D og E i den næste [Altså i function setWhere7()]??
Og nu har jeg jo også en select-boks der hedder valg3 skal jeg så lave en hel funktion mere for den skal virke på samme måde som den anden. Eller kan jeg også give den id valg2?
Synes godt om
Slettet bruger
20. august 2005 - 14:41#16
Nåååå nu forstår jeg.
Valg12 skal hente oplysninger i databasen.
Det er jo det der sker med denne:
Set rs = Conn.Execute("SELECT Teamname FROM Liga_Teams Where Liga=""1"" and season=""26"" ORDER BY Teamname")
Dim TeamStr TeamStr = ""
Do While Not rs.EOF If (TeamStr <> "") Then TeamStr = TeamStr & "|" TeamStr = TeamStr & rs("teamname") rs.MoveNext Loop
Dim TeamArr TeamArr = Split(TeamStr, "|")
. . . . .
Response.Write("<select name=""Team2"">") For Idx=LBound(TeamArr) To UBound(TeamArr) Response.Write("<option value=""" & TeamArr(Idx) & """>") Response.Write("" & TeamArr(Idx) & "") Response.Write("</option>") Next Response.Write("</select>")
Synes godt om
Slettet bruger
21. august 2005 - 11:34#17
Kan det stadig lad sig gøre.
Jeg har forstået det sådan at den måde du viser mig det på der er lavet så jeg selv skal skrive de muligheder der skal været i select boksen.
Det du skal lave er noget ASP-kode som udregner hvordan JavaScript-koden skal se ud. Den JavaScript-kode som jeg her taler om er den som jeg har postet i 18/08-2005 22:26:58.
Den består af flere dele: En switch-sætning og et antal setWhereX() funktioner.
Switch-sætningen skal indeholde et antal cases – en for hver Liga. Nu ved jeg ikke lige hvor du får ligaerne fra så det bliver et gæt, men denne del af ASP-koden kunne se sådan her ud:
Trin 1)
<script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT ligaID FROM ligaTabel ORDER BY ligaID" Set rs = Conn.Execute(SQL)
Do While Not rs.EOF %> case '<% =rs("ligaID") %>' : setWhere<% =rs("ligaID") %>(); break; <% rs.MoveNext Loop default : break; } } </script>
Denne stump ASP-kode, blandet med HTML-kode, udskriver en JavaScript switch, med en case for hver ligaID. Denne case kaldet funktionen setWhereX() hvor X'et er erstattet med ligaId'et, altså f.eks. setWhere2().
Trin 2)
Længere nede skal du skal have udskrevet JavaScript koden for setWhere2(). Dette kunne se sådan her ud:
<script type='text/javascript'> <% ligaID = 2 %> function setWhere<% =ligaID %>() { elm = document.getElementById('valg2'); elm.options.length = 0;
<% SQL = "SELECT Teamname, TeamID FROM Liga_Teams Where Liga=""" & ligaID & """ AND season=""26"" ORDER BY Teamname" Set rs = Conn.Execute()
OptionNo = 0 Do While Not rs.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rs("Teamname") %>", "<% =rs("TeamID") %>"); <% OptionNo = OptionNo + 1 rs.MoveNext Loop %> elm.options[0].selected = true; } </script>
Trin 3)
Nu var dette jo kun den ene for ligaID = 2. Hvis du skal have dem alle sammen med skal det derfor styres af en ydre løkke som løber igennem alle ligaID'erne:
<script type='text/javascript'> <% SQL = "SELECT ligaID FROM ligaTabel ORDER BY ligaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF ligaID = rsYdre(ligaID) %> function setWhere<% =ligaID %>() { elm = document.getElementById('valg2'); elm.options.length = 0;
<% SQL = "SELECT Teamname, TeamID FROM Liga_Teams Where Liga=""" & ligaID & """ AND season=""26"" ORDER BY Teamname" Set rsIndre = Conn.Execute()
OptionNo = 0 Do While Not rsIndre.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rsIndre("Teamname") %>", "<% =rsIndre(TeamID) %>"); <% OptionNo = OptionNo + 1 rsIndre.MoveNext Loop %> elm.options[0].selected = true; } <% rsYdre.MoveNext Loop %> </script>
Dette er en pæn sammenblanding af ASP-kode som udskriver JavaScript kode, men det skal man ikke lade sig gå på af. Det korte af det lange er at du ender med at have fåret udskrevet noget som ligner den JavaScript struktur som jeg postede længere oppe.
Synes godt om
Slettet bruger
23. august 2005 - 22:20#24
Puhhhaaa Det ser ellers godt ud vil ikke være utaknemlig eller noget eller virker ikke intresseret. Men har været på arbejde i 12 timer idag og er godt kvæstet.
Jeg kigger lige ordenligt på det i morgen når hjerne kan følge med.
Sidder lige og leger med det nu. Men der er fejl i skidtet.
Her er siden som den ser ud nu. Under kan du se fejl meddelsen: PS. Har måtte rette nogle navne i databasen.
-------------------------------------------------
<%
%><!--#include file="db_open.asp"--> <script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rs = Conn.Execute(SQL)
Do While Not rs.EOF %> case '<% =rs("LigaID") %>' : setWhere<% =rs("LigaID") %>(); break; <% rs.MoveNext Loop %> default : break; } } </script> <%
'Set rs = Conn.Execute("SELECT Teamname FROM Liga_Teams Where Liga=""1"" and season=""26"" ORDER BY Teamname")
Dim TeamStr TeamStr = ""
Do While Not rs.EOF If (TeamStr <> "") Then TeamStr = TeamStr & "|" TeamStr = TeamStr & rs("teamname") rs.MoveNext Loop
Dim TeamArr TeamArr = Split(TeamStr, "|")
Response.Write("<script type='text/javascript'>")
ligaID = 2 %> function setWhere<% =rs("LigaID") %>() { elm = document.getElementById('valg2'); elm.options.length = 0;
<% SQL = "SELECT Teamname, TeamID FROM WC_Liga_Teams Where Liga=""" & ligaID & """ AND season=""26"" ORDER BY Teamname" Set rs = Conn.Execute()
OptionNo = 0 Do While Not rs.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rs("Teamname") %>", "<% =rs("TeamID") %>"); <% OptionNo = OptionNo + 1 rs.MoveNext Loop %> elm.options[0].selected = true; } <% Response.Write("</script>")
... men hvorfor tager du ikke bare den kode jeg har postet 23/08-2005 22:08:15 og retter SQL'en til?
Synes godt om
Slettet bruger
24. august 2005 - 20:45#33
Det gjorde jeg også men så viste den en masse små fejl. Dem fik jeg rettet.
Og nu kom denne fejl så.:
Den nye side:
<%
%><!--#include file="db_open.asp"--> <script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rs = Conn.Execute(SQL)
Do While Not rs.EOF %> case '<% =rs("LigaID") %>' : setWhere<% =rs("LigaID") %>(); break; <% rs.MoveNext Loop
%> default : break; } } </script> <%
'Set rs = Conn.Execute("SELECT Teamname FROM Liga_Teams Where Liga=""1"" and season=""26"" ORDER BY Teamname")
Dim TeamStr TeamStr = ""
Do While Not rs.EOF If (TeamStr <> "") Then TeamStr = TeamStr & "|" TeamStr = TeamStr & rs("teamname") rs.MoveNext Loop
Dim TeamArr TeamArr = Split(TeamStr, "|")
Response.Write("<script type='text/javascript'>")
ligaID = 2 %> function setWhere<% =rs("LigaID") %>() { elm = document.getElementById('valg2'); elm.options.length = 0; <% SQL = "SELECT Teamname, TeamID FROM WC_Liga_Teams Where Liga=""" & ligaID & """ AND season=""26"" ORDER BY Teamname" Set rs = Conn.Execute()
OptionNo = 0
Do While Not rs.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rs("Teamname") %>", "<% =rs("TeamID") %>"); <% OptionNo = OptionNo + 1 rs.MoveNext Loop
Prøv denne her stump kode til at udskrive JavaScript delen:
<!--#include file="db_open.asp"--> <script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF %> case '<% =rsYdre("LigaID") %>' : setWhere<% =rsYdre("LigaID") %>(); break; <% rsYdre.MoveNext Loop default : break; } }
<% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF LigaID = rsYdre("LigaID") %> function setWhere<% =LigaID %>() { elm = document.getElementById('valg2'); elm.options.length = 0;
<% SQL = "SELECT Teamname, TeamID FROM Liga_Teams Where Liga='" & LigaID & "' AND season='26' ORDER BY Teamname" Set rsIndre = Conn.Execute()
OptionNo = 0 Do While Not rsIndre.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rsIndre("Teamname") %>", "<% =rsIndre(TeamID) %>"); <% OptionNo = OptionNo + 1 rsIndre.MoveNext Loop %> elm.options[0].selected = true; }
<% rsYdre.MoveNext Loop %> </script>
Synes godt om
Slettet bruger
26. august 2005 - 16:42#35
Fejl:
Microsoft VBScript compilation error '800a03ea'
Syntax error
/wc/liga_match_add.asp, line 22
break; -----^
Synes godt om
Slettet bruger
26. august 2005 - 16:43#36
Det er i denne linje:
<!--#include file="db_open.asp"--> <script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF %> case '<% =rsYdre("LigaID") %>' : setWhere<% =rsYdre("LigaID") %>(); break; <% rsYdre.MoveNext Loop default : break; < ---------------- HER
<% rsYdre.MoveNext Loop %> < ---------------- HER default : break;
Synes godt om
Slettet bruger
26. august 2005 - 18:50#38
function sync(val) { switch (val) { case '1' : setWhere1(); break; case '2' : setWhere2(); break; case '3' : setWhere3(); break; case '4' : setWhere4(); break; case '5' : setWhere5(); break; case '6' : setWhere6(); break; case '7' : setWhere7(); break; default : break; } } function setWhere1() { elm = document.getElementById('valg2'); elm.options.length = 0;
Microsoft VBScript runtime error '800a01c2'
Wrong number of arguments or invalid property assignment: 'execute'
/wc/liga_match_add.asp, line 41
<% SQL = "SELECT Teamname, TeamID FROM Liga_Teams Where Liga='" & LigaID & "' AND season='26' ORDER BY Teamname" Set rsIndre = Conn.Execute() <-------------- Linje 41
Hmm jamen det forstår jeg nemlig ikke for den har virket før jo.>
Det er jo nok fordi at jeg systematisk har kaldt mine for rdIndre og rsYdre - grunden til at dit har fungeret før har så været at du har genbrugt mine variable. det kan dog aldrig have fungeret korrekt hvis du ikke også har haft en Conn.Ececute tilknyttet - for då hart du bare været ved enden af den forrige.
Synes godt om
Slettet bruger
26. august 2005 - 19:25#46
Hehe ja men det skulle ikke bruges alligevel. Så jeg har slettet det og som jeg skrev før:
Sådan nu mangler jeg bare 2 ting.
1. At jeg kan se en Dropdown boks hvor man vælger liga.
2. At jeg kan se en Dropdown boks hvor man vælger teamname where Liga=""" & ligaID & """
Forløbig har vi jo også kun fokuseret på at vi havde to select-bokse i alt.
Du kan ikke have to selects med det samme id, så derfor må den anden af de to altså kaldes:
<select id="valg3" "valg3"> </select>
Derefter skal JavaScrip-delen ændre stil dette:
<!--#include file="db_open.asp"--> <script type='text/javascript'> function sync(val) { switch (val) { <% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF %> case '<% =rsYdre("LigaID") %>' : setWhere<% =rsYdre("LigaID") %>(); break; <% rsYdre.MoveNext Loop %> default : break; }
elm3.options.length = 0; for (i=0; i<elm2.options.length; i++) { elm3.options[i] = new Option(elm2.options[i].text, elm2.options[i].value); } elm3.options[0].selected = true; }
<% SQL = "SELECT LigaID FROM WC_Liga_Liga ORDER BY LigaID" Set rsYdre = Conn.Execute(SQL)
Do While Not rsYdre.EOF LigaID = rsYdre("LigaID") %> function setWhere<% =LigaID %>() { elm = document.getElementById('valg2'); elm.options.length = 0;
<% SQL = "SELECT Teamname, TeamID FROM Liga_Teams Where Liga='" & LigaID & "' AND season='26' ORDER BY Teamname" Set rsIndre = Conn.Execute(SQL)
OptionNo = 0 Do While Not rsIndre.EOF %> elm.options[<% =OptionNo %>] = new Option("<% =rsIndre("Teamname") %>", "<% =rsIndre(TeamID) %>"); <% OptionNo = OptionNo + 1 rsIndre.MoveNext Loop %> elm.options[0].selected = true; }
Der er faktisk ingen grund til at oprette et nyt spørgsmål for at give flere point. Ude i højre side er der et menufelt som hedder "Funktioner" og under det, er der et menupunkt til formålet: "Afsæt flere point".
Husk i øvrigt lige at få lukket det originale spørgsmål:
PS: Jeg undskylder fejlene undervejs, men som du jo nok kan se så er det noget kode hvor man virkeligt skal holde tungen lige i munden. :^|
Synes godt om
Slettet bruger
28. august 2005 - 21:52#67
Jamen det gør ikke et spor det var kun dejligt at jeg selv kunne se at trods det jeg ikke fattet meget af det du skrev kunne jeg alligevel rette nogle af de fejl der var.
Så det var kun godt.
Synte iøvrigt at det var en super hjælp du gav en lidt dum person som mig. Det var bare nice.
Mange tak for point samt de pæne ord. Og så er det jo fedt at du er i stand til at gennemskue de fejl der var - du skal sgu nok komme efter det. :^)
Synes godt om
Slettet bruger
29. august 2005 - 15:59#69
Ja det håber jeg da.
Synes godt om
Ny brugerNybegynder
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.