PPeter SMedlem sedan dec. 20025 483 inlägg
- Du behöver inte veta dess storlek
- Nej, s.k. associativa arrayer finns också:
var arr = [];
arr["uno"] = 1;
arr["dos"] = "2";
arr["tres"] = new Number(3);
- Några exempel:
var arr = [["a","b","c"],["d","e","f"]];
// arr[0][0] = "a"
// arr[0][2] = "c"
// arr[1][1] = "e"
// eller
var k = new Array();
for (var i = 0; i < 10; ++i){
k[i] = new Array();
}

AaasahMedlem sedan mars 20034 471 inlägg Hmmm, var ska detta definieras? 
Följande genererar fel. "startPosJSarr[...]indexDown är null " någonting... Se bifogad bild. (Färgen är gif:s fel, men det går att läsa...)
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
//Funkar inte heller
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ix = row + col;
var posD = document.getElementById("wordBoxDownPos");
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
ruta.innerText = row + " " + col;
//posD.innerText = ix + " down";
posD.innerText = startPosJSarr[ix]["indexDown"]; //Fel även för def index
posA.innerText = startPosJSarr[ix]["indexAcross"]; //dito
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
}
</script>
Däremot funkar följande:
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
/*
//Funkar inte heller
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
*/
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ix = row + col;
var posD = document.getElementById("wordBoxDownPos");
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
ruta.innerText = row + " " + col;
posD.innerText = ix + " down"; //OK
//posD.innerText = startPosJSarr[ix]["indexDown"];
//posA.innerText = startPosJSarr[ix]["indexAcross"];
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
}
</script>
Alltså är det arrayen som strular.
("heller" ovan kommer ifrån att jag naturligtvis inte vill hårdkoda innehållet eg. Det här är bara ett sätt att fatta hur det funkar - eller inte funkar...
)
PPeter SMedlem sedan dec. 20025 483 inlägg Testa
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
//Funkar förhoppningsvis nu
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["C1"] = new Array();
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
AaasahMedlem sedan mars 20034 471 inlägg Ja, det funkar. 
Men... hur kollar jag då om new Array() är gjort eller ej? För när värdena inte hårdkodas kommer ett visst index' down-värden att fyllas oberoende av across-värdena. Vissa positioner startar nya ord både across och down, andra positioner har bara ettdera. Så om
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
detta redan gjorts kan jag ju inte göra
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
utan att tappa den första informationen. Och om inget across lagts in på den positionen måste jag göra new Array() först. Hur lösa?
- Måste arrayen fyllas med värden i HEAD, eller kan det göras i BODY? Ser en funktion i HEAD, globala variabler i BODY-delen, eller bara sådant som definierats ovanför?
PPeter SMedlem sedan dec. 20025 483 inlägg
if (typeof startPosJSarr["A1"] == "undefined"){
// startPosJSarr["A1"] = new Array(); kan inte ha gjorts
}
- Arrayen kan du fylla var helst det passar. Globala variabler är inte kopplade till någon del i HTML-koden.
AaasahMedlem sedan mars 20034 471 inlägg OK, vad är det jag inte ser? Jag tycker
att alla positiner jag kan trycka i är definierade och att startpositionen för ett ord borde uppenbara sig i Pos när man trycker på valfri vit ruta. Det tycker tydligen inte JS... 
Jag får samma felmeddelande som bifogats ovan. Om ni vill kika på sidan, så är den här.
Det jag vill ska hända är att om jag trycker i valfri vit ruta så ska information komma upp i wordBox-rutan om det eller de ord som rutan ingår i.
I HEAD
<script type="text/javascript">
var letterBoxJSarr = new Array();
var startPosJSarr = new Array();
function markWord(row, col) {
var ruta = document.getElementById("wordBoxHeader");
var ixLB = row + col;
var ixSPA = startPosJSarr[ixLB]["startAcross"];
var ixSPD = startPosJSarr[ixLB]["startDown"];
var posA = document.getElementById("wordBoxAcrossPos");
var inpOrdA = document.getElementById("wordBoxAcrossWord");
var subA = document.getElementById("wordBoxAcrossSubmit");
var posD = document.getElementById("wordBoxDownPos");
var inpOrdD = document.getElementById("wordBoxDownWord");
var subD = document.getElementById("wordBoxDownSubmit");
ruta.innerText = row + " " + col;
posA.innerText = startPosJSarr[ixSPA]["indexAcross"];
posD.innerText = startPosJSarr[ixSPD]["indexDown"];
if (posA.innerText != "-") {
inpOrdA.disabled = false;
subA.disabled = false;
}
else {
inpOrdA.disabled = true;
subA.disabled = true;
}
if (posD.innerText != "-") {
inpOrdD.disabled = false;
subD.disabled = false;
}
else {
inpOrdD.disabled = true;
subD.disabled = true;
}
}
</script>
I BODY definieras följande:
<table><tr><td class="index"> </td><td class="index">1</td><td class="index">2</td><td class="index">3</td><td class="index">4</td></tr><tr><td class="index">A</td><td class="vit" onclick="markWord('A', 1);">
<input type="hidden" name="A 1" size=1 value=""> </td><td class="vit" onclick="markWord('A', 2);">
<input type="hidden" name="A 2" size=1 value=""> </td><td class="vit" onclick="markWord('A', 3);">
<input type="hidden" name="A 3" size=1 value=""> </td><td class="vit" onclick="markWord('A', 4);">
<input type="hidden" name="A 4" size=1 value=""> </td></tr><tr><td class="index">B</td><td class="vit" onclick="markWord('B', 1);">
<input type="hidden" name="B 1" size=1 value=""> </td><td class="svart"> </td><td class="vit" onclick="markWord('B', 3);">
<input type="hidden" name="B 3" size=1 value=""> </td><td class="svart"> </td></tr><tr><td class="index">C</td><td class="vit" onclick="markWord('C', 1);">
<input type="hidden" name="C 1" size=1 value=""> </td><td class="vit" onclick="markWord('C', 2);">
<input type="hidden" name="C 2" size=1 value=""> </td><td class="vit" onclick="markWord('C', 3);">
<input type="hidden" name="C 3" size=1 value=""> </td><td class="vit" onclick="markWord('C', 4);">
<input type="hidden" name="C 4" size=1 value=""> </td></tr><tr><td class="index">D</td><td class="vit" onclick="markWord('D', 1);">
<input type="hidden" name="D 1" size=1 value=""> </td><td class="svart"> </td><td class="svart"> </td><td class="svart"> </td></tr></table><BR><BR><form><form>
<table><tr><td id=\"wordBoxHeader\" colspan=\"3\"><center>You clicked on:</center></td></tr>
<tr><th>Pos</th><th>The Word</th><th>Direction</th></tr>
<tr><td id=\"wordBoxAcrossPos\">-</td>
<td><input type=\"text\" id=\"wordBoxAcrossWord\" disabled></td>
<td><input type=\"submit\" id=\"wordBoxAcrossSubmit\" value=\"Add Across!\" disabled></tr>
<tr><td id=\"wordBoxDownPos\">-</td>
<td><input type=\"text\" id=\"wordBoxDownWord\" disabled></td>
<td><input type=\"submit\" id=\"wordBoxDownSubmit\" value=\"Add Down!\" disabled></tr>
</table><BR><BR>
<script type=\"text/javascript\">
letterBoxJSarr["A1"] = new Array();
letterBoxJSarr["A1"]["startDown"] = "A1";
letterBoxJSarr["A1"]["nextDown"] = "B1";
letterBoxJSarr["A1"]["startAcross"] = "A1";
letterBoxJSarr["A1"]["nextAcross"] = "A2";
letterBoxJSarr["A2"] = new Array();
letterBoxJSarr["A2"]["startDown"] = "-";
letterBoxJSarr["A2"]["nextDown"] = "-";
letterBoxJSarr["A2"]["startAcross"] = "A1";
letterBoxJSarr["A2"]["nextAcross"] = "A3";
letterBoxJSarr["A3"] = new Array();
letterBoxJSarr["A3"]["startDown"] = "A3";
letterBoxJSarr["A3"]["nextDown"] = "B3";
letterBoxJSarr["A3"]["startAcross"] = "A1";
letterBoxJSarr["A3"]["nextAcross"] = "A4";
letterBoxJSarr["A4"] = new Array();
letterBoxJSarr["A4"]["startDown"] = "-";
letterBoxJSarr["A4"]["nextDown"] = "-";
letterBoxJSarr["A4"]["startAcross"] = "A1";
letterBoxJSarr["A4"]["nextAcross"] = ".";
letterBoxJSarr["C1"] = new Array();
letterBoxJSarr["C1"]["startDown"] = "A1";
letterBoxJSarr["C1"]["nextDown"] = "D1";
letterBoxJSarr["C1"]["startAcross"] = "C1";
letterBoxJSarr["C1"]["nextAcross"] = "C2";
letterBoxJSarr["C2"] = new Array();
letterBoxJSarr["C2"]["startDown"] = "-";
letterBoxJSarr["C2"]["nextDown"] = "-";
letterBoxJSarr["C2"]["startAcross"] = "C1";
letterBoxJSarr["C2"]["nextAcross"] = "C3";
letterBoxJSarr["C3"] = new Array();
letterBoxJSarr["C3"]["startDown"] = "A3";
letterBoxJSarr["C3"]["nextDown"] = ".";
letterBoxJSarr["C3"]["startAcross"] = "C1";
letterBoxJSarr["C3"]["nextAcross"] = "C4";
letterBoxJSarr["C4"] = new Array();
letterBoxJSarr["C4"]["startDown"] = "-";
letterBoxJSarr["C4"]["nextDown"] = "-";
letterBoxJSarr["C4"]["startAcross"] = "C1";
letterBoxJSarr["C4"]["nextAcross"] = ".";
letterBoxJSarr["B1"] = new Array();
letterBoxJSarr["B1"]["startDown"] = "A1";
letterBoxJSarr["B1"]["nextDown"] = "C1";
letterBoxJSarr["B1"]["startAcross"] = "-";
letterBoxJSarr["B1"]["nextAcross"] = "-";
letterBoxJSarr["D1"] = new Array();
letterBoxJSarr["D1"]["startDown"] = "A1";
letterBoxJSarr["D1"]["nextDown"] = ".";
letterBoxJSarr["D1"]["startAcross"] = "-";
letterBoxJSarr["D1"]["nextAcross"] = "-";
letterBoxJSarr["B3"] = new Array();
letterBoxJSarr["B3"]["startDown"] = "A3";
letterBoxJSarr["B3"]["nextDown"] = "C3";
letterBoxJSarr["B3"]["startAcross"] = "-";
letterBoxJSarr["B3"]["nextAcross"] = "-";
startPosJSarr["A1"] = new Array();
startPosJSarr["A1"]["indexDown"] = "1 (A-D)";
startPosJSarr["A1"]["lengthDown"] = "4";
startPosJSarr["A1"]["indexAcross"] = "A (1-4)";
startPosJSarr["A1"]["lengthAcross"] = "4";
startPosJSarr["C1"] = new Array();
startPosJSarr["C1"]["indexDown"] = "-";
startPosJSarr["C1"]["lengthDown"] = "-";
startPosJSarr["C1"]["indexAcross"] = "C (1-4)";
startPosJSarr["C1"]["lengthAcross"] = "4";
startPosJSarr["A3"] = new Array();
startPosJSarr["A3"]["indexDown"] = "3 (A-C)";
startPosJSarr["A3"]["lengthDown"] = "3";
startPosJSarr["A3"]["indexAcross"] = "-";
startPosJSarr["A3"]["lengthAcross"] = "-";
</script><BR>
PPeter SMedlem sedan dec. 20025 483 inlägg Du har en massa <br> i ditt nedre JS-block på hemsidan.
AaasahMedlem sedan mars 20034 471 inlägg Inte nu längre. (De kom dit när jag skrev ut på skärmen i felsökningssyfte.)
Men det gjorde ingen skillnad... 
PPeter SMedlem sedan dec. 20025 483 inlägg Ok. 
Här:
posA.innerText = startPosJSarr[ixSPA]["indexAcross"];
Försöker du med indexet "ixSPA" accessa ett element. Men eftersom var ixSPA = startPosJSarr[ixLB]["startAcross"]; ej är definierad får du ett felmeddelande; du har ju inte givit något värde till, exempelvis, var ixSPA = startPosJSarr["A1"]["startAcross"];. Är det inte letterBoxJSarr du vill använda?