webForumDet fria alternativet

foreach eller dylikt?

10 svar · 416 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

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

@ndersMedlem sedan juni 200032 969 inlägg
#2

for - in?

Mvh

aasahMedlem sedan mars 20034 471 inlägg
#3

Tjusigt! Tack! :e

@ndersMedlem sedan juni 200032 969 inlägg
#4

Vasse! :bire

aasahMedlem sedan mars 20034 471 inlägg
#5

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;
      }
   }
}
Peter SMedlem sedan dec. 20025 483 inlägg
#6

Hej! :)

Det är ett par saker som är odefinierade. T.ex. är startPosJSarr[ixSP]["direction"] odefinierad när jag trycker på, säg, A10.

aasahMedlem sedan mars 20034 471 inlägg
#7

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?

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Jag ser ingen startPosJSarr[ixSP]["direction"] i din kod ovan.

:)

aasahMedlem sedan mars 20034 471 inlägg
#9

Å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;
      }
   }
}
Peter SMedlem sedan dec. 20025 483 inlägg
#10

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).

:)

aasahMedlem sedan mars 20034 471 inlägg
#11

Å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

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)