Packe Hintergrundbildänderung in Tabelle nicht.

Kai
Hi.
Also, ich machs kurz da ich schon relativ müde bin:

Ich habe ne Tabelle mit verschiedenen Hintergrundsbildern, oder auch nicht, hängt vom Datenbankinhalt ab.

Den <td>-Tags wird per PHP in einer Schleife jeweils der Name "TD + $i" gegeben. In Wirklichkeit heißt die Variable x, aber i ist afaik da geläufiger.
Auf jedenfall heißt so die erste TD0, die zweite TD1, die 3. TD2 usw.
Jetzt wollte ich den Hintergrund je nach gegebenheiten ändern. Um genau zu sein je nach momentanen Inhalt und der Distanz zu einem anderen Feld.

Aber zum Test wollte ich mal alle Hintergrundsbilder auf einmal ändern.
Leider erhalte ich von der FF Fehlerkonsole immer dem Fehler "document.TD0 has no properties" oder so ähnlich, unter IE "document.TD0.background is null or not a object".
Aber die TDs haben den richtigen Namen, das habe ich per Quelltextansicht geprüft.

Hier der JS-Ausschnitt.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
	
while(durchlauf != <?php echo $lengthmal; ?>)
{			
	x2 = Math.floor(x / <?php echo $lengthx; ?>);
	y2 = durchlauf%<?php echo $lengthx; ?>;	
			
	$dist = Math.sqrt((x-x2)*(x-x2) + (y-y2)*(y-y2));
	dummy = eval("document.TD" + durchlauf + ".background");
	dummy = "lol.png";
				
	durchlauf = durchlauf + 1;
}


Zur Info: $lenghtmal enthält die Anzahl aller Felder der Tabelle, $lengthx die waagrechte Länge der Tabelle, x und y die Koordinaten das Feld von dem es ausgeht, x2 und y2 das Feld bei dem die Distanz zu x/y im Moment geprüft wird, dist am Ende die Distanz. Alle Variablen sind intialisiert.

Hier der PHP-Ausschnitt, falls das jemand interessiert:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<?php while($x $lengthmal)
{
    echo "<td name=\"TD".$x."\" id=\"TD".$x."\" valign=\"middle\" align=\"center\" ";
        
    if($array[$x] == 0)
    {
        echo "background=\"img/water.png\">";
    }
    elseif($array[$x] == 1)
    {
        echo "background=\"img/gras.png\">";
    }
    elseif($array[$x] == 2)
    {
        echo "background=\"img/huegel.png\">";
    }
    elseif($array[$x] == 3)
    {
        echo "background=\"img/berg.png\">";
    }
    elseif($array[$x] == 4)
    {
        echo "background=\"img/desert.png\">";
    }
    else
    {
        echo "background=\"img/gras.png\">";
    }
... ?>


$array enthält (natürlich als Array) nacheinander die Informationen der Feldinhalte. Alles andere sollte glaub ich klar sein.


Kann mir bitte jemand helfen. Verstehe den Fehler nicht, die <td>'s haben doch eindeutig background als Eigenschaft.


Ach ja:

Ich würde es gerne so umbauen, dass ein User nur ein paar Felder sieht, z. B. 10 mal 10 und per Bild mit Link dann scrollen kann.
Nur habe ich keine Ahnung wie ich das lösen könnte. Kann mir wer da bitte einen oder 2 Denkanstöße geben?
daHooligan
kannst du bitte mal nen generierten html-schnipsel posten?
so wie es aussieht scheint in deinem array kein element ==0 zu sein un dadurch wird TD0 kein Hintergrund zugewiesen.

und mach da draus
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
while(durchlauf != <?php echo $lengthmal; ?>)
{
x2 = Math.floor(x / <?php echo $lengthx; ?>);
y2 = durchlauf%<?php echo $lengthx; ?>;

$dist = Math.sqrt((x-x2)*(x-x2) + (y-y2)*(y-y2));
dummy = eval("document.TD" + durchlauf + ".background");
dummy = "lol.png";

durchlauf = durchlauf + 1;
}


bitte mal so was:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<?
echo"while(durchlauf  != ".$lengthmal." )\n
{\n
x2 = Math.floor(x / ". $lengthx.")\;\n
y2 = durchlauf%".$lengthx."\;\n
\n
// was soll das "$" hier??
$dist = Math.sqrt((x-x2)*(x-x2) + (y-y2)*(y-y2))\;\n
dummy = eval(\"document.TD\" + durchlauf + \".background\")\;\n
dummy = \"lol.png\"\;\n
\n
durchlauf = durchlauf + 1\;\n
}\n


sieht ja grausig aus.

Seit wann brauchen TDs eigentlich namen?? schon mal ohne versucht?
andere idee wäre bei 1 anzufangen mit zählen
Kai
Danke, aber ich habe es jetzt per

style=\"background-image: url(img/huegel.png);\

und

document.getElementById('TD' + durchlauf).style.backgroundImage

gemacht.
Das funst.

Aber warum soll ich Zeilenumbrüche und Magic Quotes einfügen?
Ich finde das es so viel geordneter und übersichtlicher aussieht.
Die Namen habe ich vergeben damit ich dem Browser sagen kann welches Objekt ich meine.
daHooligan
anscheinend kann es beim einbinden mit "<? ?>" mitten im source sicherheitsprobleme und probleme beim interpreter geben....
Kai
Heißt das ich sollte den JavaScript - Teil auch unter einen PHP-Tag schreiben?
Hab btw. ein neues Problem:


document.getElementById('B' + durchlauf).setAttribute('href','java script:move_unit()',0);

Ich will bestimmten Bildern die Links wegnehmen. Selber Fehler:
document.getElementById("B" + durchlauf) has no properties

PHP/HTML schaut so aus:

echo "<a id=\"B".$x."\" href=\"\"><img src=\"img/blank.gif\" border=\"0\"></a></td>";
Chris Hunter
Das wird das selbe problem sein wie schon oben beschrieben. schau mal welchen wert die variabel durchlauf im fehlerfall hat.

Noch ein kleiner Tip zur lesbarkeit:
Wenn du Variabeln sowieso in dieser Form einbindest -> ".$x."
dann würde ich empfehlen das du echo mit einfachen ' verwendest.
besonders bei der ausgabe von HTMl hast du sonst viele " die du escapen musst. ich für mich werde dann immer wahnsinnig wenn ich einen Fehler suchen muss.
Deine Zeile oben kommt mit dieser schreibweise gleich viel angenehmer rüber:

code:
1:
echo '<a id="B'.$x.'" href="#"><img src="img/blank.gif" border="0"></a></td>'; 


oh da fällt mir grad auf. versuch mal als link nicht n leerstring zu setzen, sondern n leeren anchor -> #
Ich glaub das ist aber eher wunschdenken als lösungsansatz :-D
Kai
Danke für den Tipp, daran habe ich noch nicht gedacht.
Ich weiß aber eigendlich nicht was der Fehler oben war. Dachte eigendlich das es daran lag dass JavaScript background nicht unterstützt, aber das ist ja keine Eigenschaft sondern eine Funktion.
durchlauf hat 20, die Funktion wird dort das erste mal aufgerufen, da ich sie vorher nicht brauche.
Chris Hunter
Hat die # denn was gebracht? eher nicht, gell... ich kann mich erinnen das ich so ein ähnliches problem auch schonmal hatte, kann mich aber nicht erinnern was es war...
läufts in keinem browser?
Kai
Nein, nein. Habe aber nur IE und FF.
Das Problem heißt doch eigendlich, dass das Objekt noch nicht intialisiert ist. Aber das ist es doch. :/
Kai
Juhu, es funktioniert. Aber bitte nicht fragen wieso, ich weiß es selbst nicht.
Habe ein paar Objekten neue IDs verpasst und sie ein wenig angepasst damit ich mich später besser auskenne, auf einmal hat es geklappt. O_O

Jetzt fehlt (derzeit) nur eins:

Zitat:
Ach ja:

Ich würde es gerne so umbauen, dass ein User nur ein paar Felder sieht, z. B. 10 mal 10 und per Bild mit Link dann scrollen kann.
Nur habe ich keine Ahnung wie ich das lösen könnte. Kann mir wer da bitte einen oder 2 Denkanstöße geben?


Könnte ich es so mache dass z. B. beim Aufbau der Seite 2 Variablen auf 0/0 gesetzt werden, und ich dann durchgehe und dann überprüfe ob ein Feld 0 + 15 ist, und wenn nicht es z. B. irgendwie ausblende oder z. B. verkleinere, dass es nichtmehr sichtbar ist? (Oder das src-Attrabit entferne oder so.)
Und beim Scrollen wird dann natürlich die jeweilige Variable immer um 1 erhöht/vermindert und das Feld neu überprüft.

(Sorry wegen Doppelpost, aber ihr müsst ja sehen dass sich da was geändert hat.)