Finns det någon smart motsvarighet till PHP:s foreach vilken rasslar igenom alla satta värden i en associerad array? Alltså, när en for-slinga är svår att använda? Hur gör man annars? :q
foreach eller dylikt?
10 svar · 416 visningar · startad av aasah
Tjusigt! Tack! :e
Vasse! :bire
Jag vet inte om det är jag som inte föstår hur man använder funktionen eller var felet är, men markWord strular. Så länge de ***-markerade raderna är avkommenterade slipper jag JS-fel, men om jag tar bort kommentarmarkeringen från vilken som helst av dem kommer felen.
JS-felmeddelande skrev:
'null' är null och inget objekt
Va? :q Vad är tokigt? Sidan.
function markWord(row, col) {
var ixLB = row + col;
var formHead = document.getElementById("wordBoxHeader");
formHead.innerHTML = "<center><font color=black>You clicked on:</font> " + row + " " + col + "</center>";
//Omvänd ordning gör att Across focus hamnar överst, därefter Down osv om flera riktingar finns
var usedDirs = 0;
for (pid in letterBoxJSarr[ixLB]) {
var ixSP = letterBoxJSarr[ixLB][pid]["start"];
var wordDir = startPosJSarr[ixSP]["direction"];
usedDirs = usedDirs | dirJSarr[wordDir];
var formPos = document.getElementById("wordBoxPos" + wordDir);
var startRuta = document.getElementById("wordBoxStart" + wordDir);
var pidHid = document.getElementById("wordBoxPid" + wordDir);
// *** formPos.innerText = wordDir + " " + startPosJSarr[ixSP][pid]["index"];
// *** startRuta.value = ixSP;
// *** pidHid.value = pid;
}
var focusSet = false;
for (d in dirJSarr) {
var formWord = document.getElementById("wordBoxWord" + d);
var formButton = document.getElementById("wordBoxButton" + d);
if ((usedDirs & dirJSarr[d]) != 0) { //används
formWord.disabled = false;
formButton.disabled = false;
if (!focusSet) {
formWord.focus();
focusSet = true;
}
}
else { //används ej
var formPos = document.getElementById("wordBoxPos" + d);
var startRuta = document.getElementById("wordBoxStart" + d);
formPos.innerText = "-";
startRuta.value = "";
formWord.disabled = true;
formButton.disabled = true;
}
}
}
Hej! :)
Det är ett par saker som är odefinierade. T.ex. är startPosJSarr[ixSP]["direction"] odefinierad när jag trycker på, säg, A10.
Hej, Peter S! :)
Peter S skrev:
... Det är ett par saker som är odefinierade. T.ex. är startPosJSarr[ixSP]["direction"] odefinierad när jag trycker på, säg, A10.
Varför?
Källa skrev:
//...
letterBoxJSarr["A9"] = new Array();
letterBoxJSarr["A9"]["1"] = new Array();
letterBoxJSarr["A9"]["1"]["start"] = "A9";
letterBoxJSarr["A9"]["1"]["next"] = "A10";
letterBoxJSarr["A10"] = new Array();
letterBoxJSarr["A10"]["1"] = new Array();
letterBoxJSarr["A10"]["1"]["start"] = "A9";
letterBoxJSarr["A10"]["1"]["next"] = ".";
letterBoxJSarr["A10"]["15"] = new Array();
letterBoxJSarr["A10"]["15"]["start"] = "A10";
letterBoxJSarr["A10"]["15"]["next"] = "B10";
//...
startPosJSarr["A9"] = new Array();
startPosJSarr["A9"]["1"] = new Array();
startPosJSarr["A9"]["1"]["direction"] = "A";
startPosJSarr["A9"]["1"]["index"] = "A (9-10)";
startPosJSarr["A9"]["1"]["length"] = "2";
//...
startPosJSarr["A10"] = new Array();
startPosJSarr["A10"]["15"] = new Array();
startPosJSarr["A10"]["15"]["direction"] = "D";
startPosJSarr["A10"]["15"]["index"] = "10 (A-G)";
startPosJSarr["A10"]["15"]["length"] = "7";
Om du trycker på A10 kommer markWord('A', 10) att anropas. Var går det då snett? :q
Kommer for...in att använda fler värden än pid = 1 och pid = 15?
Åh! Det första man blir blind på... Har ändrat enligt nedan, men det blir samma fel... :(
function markWord(row, col) {
var ixLB = row + col;
var formHead = document.getElementById("wordBoxHeader");
formHead.innerHTML = "<center><font color=black>You clicked on:</font> " + row + " " + col + "</center>";
//Omvänd ordning gör att Across focus hamnar överst, därefter Down osv om flera riktingar finns
var usedDirs = 0;
for (pid in letterBoxJSarr[ixLB]) {
var ixSP = letterBoxJSarr[ixLB][pid]["start"];
var wordDir = startPosJSarr[ixSP][pid]["direction"]; //Fixat!
usedDirs = usedDirs | dirJSarr[wordDir];
var formPos = document.getElementById("wordBoxPos" + wordDir);
var startRuta = document.getElementById("wordBoxStart" + wordDir);
var pidHid = document.getElementById("wordBoxPid" + wordDir);
formPos.innerText = wordDir + " " + startPosJSarr[ixSP][pid]["index"];
startRuta.value = ixSP;
pidHid.value = pid;
}
var focusSet = false;
for (d in dirJSarr) {
var formWord = document.getElementById("wordBoxWord" + d);
var formButton = document.getElementById("wordBoxButton" + d);
if ((usedDirs & dirJSarr[d]) != 0) { //används
formWord.disabled = false;
formButton.disabled = false;
if (!focusSet) {
formWord.focus();
focusSet = true;
}
}
else { //används ej
var formPos = document.getElementById("wordBoxPos" + d);
var startRuta = document.getElementById("wordBoxStart" + d);
formPos.innerText = "-";
startRuta.value = "";
formWord.disabled = true;
formButton.disabled = true;
}
}
}
Klickar jag i A10 försöker raden var formPos = document.getElementById("wordBoxPos" + wordDir); hämta elementen med id = wordBoxPosA och id = wordBoxPosD. Ingen av dem existerar, så formPos blir null och felet uppkommer på raden formPos.innerText...
(Det kanske är nu det skall nämnas att innerText är IE-specifikt; använd innerHTML om du vill ha skriptet mer kompatibelt).
:)
Åh vad jag är korkad! Självklart! Tusen tack för hjälpen!!! :e
Och ännu mer tack för påpekandet om IE! Det måste funka i IE, men jag ser helst att det funkar i så många webbläsare som möjligt. :birp