webForumDet fria alternativet

Felmeddelande - not an object

8 svar · 556 visningar · startad av skyman

skymanMedlem sedan juli 20012 450 inlägg
#1

Denna kod:

<html>
<head>
<script language="javascript">
<!--
function LoadForm(){
	var myArr = new Array();
	myArr["4.0"]["0"]["NETWORK"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
}
//-->
</script>
</head>
<body onload="LoadForm();">
</body>
</html>

Ger felmeddelande:
'4.0.0' is null or not an object...
Vad betyder det?
Är det ett felaktigt sätt att definera en array?

JojoxxMedlem sedan juni 20004 308 inlägg
#2

Jepp. En array använder tal (integer) som nyckel meddans "4.0", "0" och "NETWORK" är strängar. Ett Object kan liknas vid en array vid detta hänsende där du kan ha egenskaper till objektet. Så här:

	var myArr={
		"4.0":{
			"0":{
				"NETWORK":["lite text", "???", "", "bla bla", "bla bla", "read"]
			}
		}
	}

(anm. myArr är kanske inte det mest logiska längre med tanke på att det inte är en array)

myArr["4.0"]["0"]["NETWORK"] är nu definierad som en array.

skymanMedlem sedan juli 20012 450 inlägg
#3

Tanken är att jag ska generera en javascript-array med hjälp av php, med information som jag hämtar från en fil.

Jag villl komma ifrån att behöva rita upp en jättearray enligt:

var myArr={
		"4.0":{
			"0":{
				"NETWORK":["lite text", "???", "", "bla bla", "bla bla", "read"]
			}
		}
	}osv...

utan bara kunna skriva:

myArr["4.0"]["0"]["NETWORK"]=[...];
myArr["4.0"]["1"]["NETWORK"]=[...];
myArr["4.0"]["2]["NETWORK"]=[...];

Så fixar mitt javascript resten.

Jag har gjort så att jag har försökt få till en array som du skrev men det blir alldeles för komplicerat med parenteser, kommatecken och andra lösa tecken som ska dit, eller inte...

Har du något tips på hur man kan komma förbi detta?

RGBMedlem sedan dec. 1999419 inlägg
#4

Är det ett felaktigt sätt att definera en array?

Du definerar myArr på ett korrekt sätt men sen försöker du hantera myArr["4.0"] som en array utan att ha definerat den som en sådan.

var myArr = new Array();
	((myArr["4.0"]=[])["0"]=[])["NETWORK"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
skymanMedlem sedan juli 20012 450 inlägg
#5

Ok, då gör jag som RGB sa...

Men kan jag inte stega genom arrayen som vanligt då?

	var myArr = new Array();
			((myArr["4.0"]=[])[0]=[])["network"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			((myArr["4.0"]=[])[0]=[])["network"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			((myArr["4.0"]=[])[0]=[])["network"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			((myArr["4.0"]=[])[0]=[])["software"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			((myArr["4.0"]=[])[0]=[])["software"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			
			((myArr["5.0"]=[])[0]=[])["network"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
			((myArr["5.0"]=[])[0]=[])["software"]=["lite text", "???", "", "bla bla", "bla bla", "read"];
	for(var tspVer in myArr){
		for(var n=0;n<100;n++){
			if(myArr[tspVer][n])
				alert(n);
			else
				n=100;
		}
	}
JojoxxMedlem sedan juni 20004 308 inlägg
#6

skyman skrev:

myArr["4.0"]=[] ...

Problemet är här att på varje rad skriver du över myArr["4.0"] och skapar en ny tom array och allt som fanns lagrat där tidigare försvinner. En annan variant:

function inject(a,b,c,arr){
	if(!myArr[a]){ myArr[a]={}; } if(!myArr[a][b]){ myArr[a][b]={}; }
	myArr[a][b][c]=arr;
}

var myArr = new Object();
inject("4.0","0","NETWORK",[1,2,3]);
inject("4.0","1","NETWORK",["a","b","c"]);
inject("4.0","2","NETWORK",[4,5,6]);

for(var tspVer in myArr){
	for(var n in myArr[tspVer]){
		for(var nn in myArr[tspVer][n]){
			alert(myArr[tspVer][n][nn]);
		}
	}
}

eller

alert(myArr["4.0"]["0"]["NETWORK"]);
skymanMedlem sedan juli 20012 450 inlägg
#7

Detta ser kanonbra ut...
Jag måste ha lite annorlunda efter som det kan finnas fler av samma:

inject("4.0","0","NETWORK"...

Så jag måste ha ett id till:

inject("4.0","0","NETWORK",[b]0[/b],...

Och då ser den slutgiltiga koden ut:

function inject(a,b1,c,[b]d[/b],arr){
	if(!myArr[a]){ myArr[a]={}; } if(!myArr[a]){myArr[a][b1]={};} [b]if(!myArr[a][b1][c]){myArr[a][b1][c]={};}[/b]
	[b]myArr[a][b1][c][d]=arr;[/b]
}

var myArr = new Object();
inject("4.0","0","NETWORK","1",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","2",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","3",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","17",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","18",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","19",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","20",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","21",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","23",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","24",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","25",["text","mer","ännu mer","lite till","slut..."]);
// osv...

for(var tspVer in myArr){
	for(var n in myArr[tspVer]){
		for(var nn in myArr[tspVer][n]){
			[b]for(var nnn in myArr[tspVer][n][nn]){[/b]
				alert(myArr[tspVer][n][nn][b][nnn][/b]);
			}
		}
	}
}

Tack så mycket för hjälpen...
Jag skulle nästan kunnat offra en arm för att få detta löst! :)

// Döpte om b till b1 för att kunna skriva ut lite fet text...

skymanMedlem sedan juli 20012 450 inlägg
#8

Hmmm...
Jag ska ladda en selectbox med första raden i varje cell...
Jag får felmedelande att selectboxen inte är ett objekt...
Vad är det för fel? Jag har kört med new Option förr och då har det fungerat...

Se nedan:

<html>
<head>
<script language="javascript">
<!--
function inject(a,b,c,d,arr){
	if(!myArr[a]){ myArr[a]={}; } if(!myArr[a][b1]){myArr[a][b1]={};} if(!myArr[a][b1][c]){myArr[a][b1][c]={};} if(!myArr[a][b1][c][d]){myArr[a][b1][c][d]={};}
	myArr[a][b1][c][d]=arr;
}
var myArr = new Object();
inject("4.0","0","NETWORK","0",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","1",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","2",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","3",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","4",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","5",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","6",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","NETWORK","7",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","SOFTWARE","8",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","SOFTWARE","9",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","0","SOFTWARE","10",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","0",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","1",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","2",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","3",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","4",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","5",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","6",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","NETWORK","7",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","8",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","9",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","1","SOFTWARE","10",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","0",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","1",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","2",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","3",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","4",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","5",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","6",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","NETWORK","7",["text","mer","ännu mer","lite till","slut..."]);
inject("4.0","2","SOFTWARE","8",["text","mer","ännu mer","lite till","slut..."]);

x=0;
for(var tspVer in myArr){
	for(var n in myArr[tspVer]){
		for(var nn in myArr[tspVer][n]){
			for(var nnn in myArr[tspVer][n][nn]){
				switch(nn){
					case "NETWORK":
 						[b]if(myArr[tspVer][n][nn][nnn][0] && nnn==0)
 							document.form1.selectNetwork[x] = new Option("'+myArr[tspVer][n][nn][nnn][0]+' '+myArr[tspVer][n][nn][nnn][3]+'", "");[/b]
 						x++;
						break;
					case "SOFTWARE":
						x++;
						break;
				}
			}
		}
	}
}
 //-->
</script>
</head>
<body>
<form name="form1">
<select name="selectNetwork">
<option selected>-</option>
</select>
<input type="text" name="test">
</form>
</body>
</html>
JojoxxMedlem sedan juni 20004 308 inlägg
#9

Felet beror på att när du försöker skapa en ny option i listan finns den inte definierad eftersom den först definieras längre ner i html-koden. Kör din kod onload istället så kommer det att fungera bättre.

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