Jag hämtar 18 st värden från en databas. Dessa värden skulle jag vilja spara i en JavaScript array för att kunna använda i det javascript som jag också har på sidan.
Så här ser min kod ut nu som är alldeles galen:
<Script Language=JavaScript>
var par = new array(18)
( mer JavaScript ...)
</Script>
<%
i= 1
For hal = i to 18
hal_par = RecSet("hal_par")%>
<Script Language=JavaScript>
par[i-1]=<%=hal_par%>
</Script>
<%
Next
(mer asp kod ...)
Hur ska jag få till så att dessa värden lägger sig i min par array?
Ett exempel på hur man kan göra.
Som du vet finns det många sätt att göra samma sak på! Be creative! :-)
SQL = "SELECT intID, strName FROM [users]"
Set mySQL = Conn.Execute(SQL)
' ## CEREATE ARRAY IF NOT END OF FILE
IF NOT mySQL.EOF THEN myLocalArray = mySQL.GetRows()
***
' ## PRINT TO SCREEN
IF IsArray(myLocalArray) THEN
myRow = myLocalArray
FOR j = 0 TO UBound(myRow,2)
' ## PRINT!!
response.write "Namn: " & myRow(1,j)
' ## LINE BREAK IF NOT LAST POST
IF j < UBound(myRow, 2) THEN response.write "<BR>"
NEXT
ELSE
' ## NO DATA
response.write "There are no users."
END IF
<%
..(asp kod) ...
%>
<Script Language="JavaScript">
function calcPoang()
{
alert('<%=parArray(0)%>'); //bara ett test för att kolla
}
..(mer JavaScript)..
</Script>
<%
..(asp kod) ...
Dim array
i=1
slut=18
For hal = i to slut
hal_par = RecSet("hal_par")
parArray(i-1)=hal_par
Response.Write(parArray(i-1)) 'bara test för att kolla
i=i+1
Next
Response.Write "<INPUT type='textarea' size=1 name=slag" & hal & " onblur='calcPoang()'>"
... ..(asp kod) ...
%>
Jag har alltså 18 textareor som heter slag1-18 (beroende på vilket varv den är i loopen). Och vid onBlur på dessa rutor anropas funktionen calcPoang som ligger ovanför i koden. Bara som ett test för att se om jag har något vettigt värde där så vill jag köra en alert på den.
Det har du ju alldeles rätt i.
Ändrade nu så jag kör Dim parArray(18) allra längst upp på sidan. Nu får jag ingen felutskrift, men den alert ruta som kommer fram är tom.
Nu har jag nog helt dribblat bort mig själv. Första jag har i filen är asp kod, där jag skapar koppling mot en accessdatabas och sen sparar några av värdena i databasen i aspvariabler. Jag sparar också de data som har postats från föregående sida. Sen har jag JavaScript. Där ligger de funktioner som ska köras beroende på vad användaren klickar på. Bla den som ska skriva ut det som finns i parArray. Sen kommer asp kod igen som via Response.Write skriver ut en tabell innehållande lite val som användaren kan göra. Min parArray skapas (dock finns Dim parArray(18) längst upp på sidan i det första partiet asp kod) här och som ett test så skriver jag ut den inte i nån <TD> tagg så den hamnar utanför tabellen. När en viss textarea tappat sin focus (onBlur) så anropas JavaScript funktionen som ligger ovan i filen och då försöker jag hämta det som står i den (alltså efter att jag redan har skrivit ut det en gång).
Sker saker och ting i fel ordning ändå måntro?
Om saker och ting sker i fel ordning, det kan jag inte svara på eftersom jag inte ser exakt sammanhang och kod. Det man ska komma ihåg är att det första som sker är att all asp-kod exekveras, och efter det skickas resultatet till webbläsaren. ASP-koden exekveras uppifrån och ner, så du kan inte komma åt värden / variabler som skapas under aktuell kodrad. Så: ska du skriva ut ett javascript som alert:ar ett värde från en array i ASP, då måste arrayen vara skapad och fylld innan dess du skriver ut javascriptet och alert-raden. Exempel:
<%
' denna kod fungerar, eftersom variabeltilldelning görs innan användandet
dim strFoo
strFoo = "bar"
response.write "<script>alert('" & strFoo & "');</script>"
%>
<%
' denna kod funkar inte, eftersom när alert-raden skrivs ut har inte variabeln något värde
dim strFoo
response.write "<script>alert('" & strFoo & "');</script>"
strFoo = "foo!=bar"
%>
Ja, att all aspkod exekveras borde ju betyda att det finns nåt i min array när jag försöker göra nåt med den i min JavaScript funktion. Felet måste ligga nån annanstans. Jag får väl dissikera rubbet helt enkelt. Tack så mycket för hjälpen!
Jag gick tillbaka till ursprunget att skapa en JavaScript array i asp koden istället för att hämta en asp array i JavaScript. Det ska tydligen inte gå enligt mycket intelligenta och kunniga källor. Men med följande kod så rockar det:
<% (asp kod)
%>
<Script Language=JavaScript>
parArray=new Array(18)
function Test()
{
for(var i=1; i<19; i++)
{
alert(parArray[i-1]);
}
}
</Script>
<% (asp kod)
For hal = i to 18
hal_par = RecSet("hal_par")
%>
<Script Language=JavaScript>
parArray[<%=i-1%>]=<%=hal_par%>
</Script>
<%
RecSet.moveNext
Next
Response.Write "<INPUT type='textarea' size=1 name=slag onblur='Test()'>"