document.write aus globaler variable/Anfängerproblem
Jan
- javascript
Hallo zusammen,
ich stehe schon seit Ewigkeiten mit Javascript auf Kriegsfuß, bzw. finde keinen Einstieg dazu. Nun hab ich mal wieder Lust mich damit rumzuärgern und promt funktioniert das ganze natürlich nicht :D .
Wie man hoffentlich sieht soll eigentlich nicht mehr passieren als verschiedene Sachen ausgegeben werden, je nachdem welchen Menüpunkt man anklickt.
Stattdessen bleibt die Variable "irgendwas" aus mir unersichtlichen Gründen undefined.
Hilfe!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
var irgendwas;
function dynmenue1(x){
switch (x) {
case "2":
irgendwas="22222";
break;
case "3":
irgendwas="33333";
break;
case "4":
irgendwas="44444";
break;
case "5":
irgendwas="55555";
break;
default:
irgendwas="11111";
break;
}
}
</script>
<style>
body{margin:100px;font-family:Arial;}
</style>
</head>
<body onload="dynmenue1()">
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="100" align="center"><b onclick="dynmenue1(1)" style="cursor:pointer">LINK1</a></td>
<td width="100" align="center"><b onclick="dynmenue1(2)" style="cursor:pointer">LINK2</a></td>
<td width="100" align="center"><b onclick="dynmenue1(3)" style="cursor:pointer">LINK3</a></td>
<td width="100" align="center"><b onclick="dynmenue1(4)" style="cursor:pointer">LINK4</a></td>
<td width="100" align="center"><b onclick="dynmenue1(5)" style="cursor:pointer">LINK5</a></td>
</tr>
<tr>
<td colspan="5" height="500">
<div style="background-color:green;height:100%;width:100%;">
<script type="text/javascript">
document.write(irgendwas);
</script>
</div>
</td>
</tr>
</table>
</body>
</html>
Hi,
Stattdessen bleibt die Variable "irgendwas" aus mir unersichtlichen Gründen undefined.
die Variable ändert sich. Du machst nur nichts mehr mit ihr.
<body onload="dynmenue1()">
<table border="1" cellspacing="0" cellpadding="0" align="center">
Möchtest Du Dich nicht erst mal mit den Grundlagen von CSS und - folglich(!) - denen von HTML beschäftigen?
Cheatah
--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Ich verstehe nicht was du mir sagen möchtest. Ist es schlimm eine Tabelle zu benutzen?
Ein Stück bin ich selbst weitergekommen, ich kann schonmal sagen das die switch Anweisung funktioniert und die Variable "irgendwas" ihren Wert bekommt (hat vorher nicht funktioniert, wegen typenkonflikt oder so).
Ich glaube zu versetehen was "Du machst nichts nichts mehr mit ihr" bedeutet. Ist damit gemeint das die Variable nicht mehr auf eine Änderung abgefragt wird?
Wenn ja, wie mache ich sowas? Ich hab mir grad meinen Kopf darüber zerbrochen, bzw. das Selfhtml Besispiel zur Überwachung der Fenstergröße angeschaut, konnte daraus aber nichts für mein Problem ableiten.
Ein kleiner Denkanstoss wär zumindest nett.
Gruß,
Jan
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
var irgendwas="00000";
function dynmenue1(x){
switch (x) {
case 2:
irgendwas="22222";
break;
case 3:
irgendwas="33333";
break;
case 4:
irgendwas="44444";
break;
case 5:
irgendwas="55555";
break;
default:
irgendwas="11111";
break;
}
}
</script>
<style type="text/css">
body{margin:100px;font-family:Arial;}
</style>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="100" align="center"><b onclick="dynmenue1(1)" style="cursor:pointer">LINK1</b></td>
<td width="100" align="center"><b onclick="dynmenue1(2)" style="cursor:pointer">LINK2</b></td>
<td width="100" align="center"><b onclick="dynmenue1(3)" style="cursor:pointer">LINK3</b></td>
<td width="100" align="center"><b onclick="dynmenue1(4)" style="cursor:pointer">LINK4</b></td>
<td width="100" align="center"><b onclick="dynmenue1(5)" style="cursor:pointer">LINK5</b></td>
</tr>
<tr>
<td colspan="5" height="500">
<div style="background-color:green;height:100%;width:100%;">
<script type="text/javascript">
document.write(irgendwas);
</script>
</div>
</td>
</tr>
</table>
</body>
</html>
Mahlzeit Jan,
Ein Stück bin ich selbst weitergekommen, ich kann schonmal sagen das die switch Anweisung funktioniert und die Variable "irgendwas" ihren Wert bekommt (hat vorher nicht funktioniert, wegen typenkonflikt oder so).
Ist ja auch kein Wunder, wenn Du der Funktion einen numerischen Wert überprüftst, diesen dann aber im switch() auf verschiedene Strings hin testest.
Ich glaube zu versetehen was "Du machst nichts nichts mehr mit ihr" bedeutet. Ist damit gemeint das die Variable nicht mehr auf eine Änderung abgefragt wird?
Nein, Du machst schlicht nichts mit ihr. Du weist ihr einen Wert zu und das war's. Wenn Du den Inhalt der Variablen nirgendwo anzeigst, wieso solltest Du ihn dann irgendwo sehen? Für einfache Tests und/oder zum Debuggen könntest Du ja mal die Variable mit einem http://de.selfhtml.org/javascript/objekte/window.htm#alert@title=alert() ausgeben ...
Wenn ja, wie mache ich sowas?
Naja, wie gibt man Werte in Javascript aus? Man könnte sie per alert() einfach ausgeben, man könnte irgendeinem Formularelement den Inhalt der Variablen als Wert zuweisen, man könnte den Wert direkt ins Dokument schreiben, man könnte ...
Ich hab mir grad meinen Kopf darüber zerbrochen, bzw. das Selfhtml Besispiel zur Überwachung der Fenstergröße angeschaut, konnte daraus aber nichts für mein Problem ableiten.
Das hat damit ja auch irgendwie ungefähr so viel zu tun wie die Betriebsanleitung für eine Eismaschine mit der Größe einer Taschentuchpackung. :-)
MfG,
EKKi
Danke für die Hilfe.
Ich gebe die Variable schon aus, weiter unten findet man "document.write(irgendwas);".
Da die Varible die dort ausgegeben wird aber noch den Wert der "initialiserung" hat und leider nicht den Wert der ihr irgendwann zwischendurch zugewiesen wurde, hänge ich an der Stelle.
Meiner Meinung nach müsste ich an der Stelle irgendwie überprüfen können ob sich die Variable geändert hat - wenn ja soll der aktuelle Inhalt dort hingeschrieben werden.
Deswegen der zusammenhang mit der Überwachung der Fenstergröße, dort muss ja schließlich auch irgendwas die ganze Zeit auf eine Änderung überwachen - sowas brauch ich hier glaub ich auch.
Also grob umschrieben:
while (solange die Seite aktiv ist)
{
if (wenn die Variable einen anderen Wert bekommt)
{
schreibe doch bitte den aktuellen Inhalt der Variablen hier hin
}
}
Gruß,
Jan
Hi,
Ich gebe die Variable schon aus, weiter unten findet man "document.write(irgendwas);".
das passiert Jahrhunderte vor der Änderung der Variablen.
Da die Varible die dort ausgegeben wird aber noch den Wert der "initialiserung" hat
Nicht "noch hat", sondern "zum Zeitpunkt der Ausführung hatte".
und leider nicht den Wert der ihr irgendwann zwischendurch zugewiesen wurde, hänge ich an der Stelle.
Du hängst in der Erwartung von Magie. Es existiert keine Verknüpfung oder sonstwas, die jedweden JavaScript-Code der gesamten Seite bei einer Variablenzuweisung noch einmal ausführt und dabei wie von Geisterhand diejenigen Stellen auslässt, die Dir gerade im Wege stehen (wie z.B. die Initialisierung der Variablen). Das document.write() ist passé.
Meiner Meinung nach müsste ich an der Stelle irgendwie überprüfen können ob sich die Variable geändert hat - wenn ja soll der aktuelle Inhalt dort hingeschrieben werden.
Klar, nur bist Du nicht mehr an der Stelle. Was das Dokument (document) betrifft, bist Du jenseits des </html>-Tags[1]. Die Funktion, die Du aufrufst, ist überhaupt nicht mehr im Dokument, sie ist Teil des Fensters. Wenn Du eine Stelle ändern möchtest, musst Du diese zunächst suchen.
Zu den Tabellen: Nein, es ist nicht falsch, Tabellen einzusetzen. Sie sind *das* Mittel in HTML zur Strukturierung tabellarischer Daten. Sie sind jedoch *kein* Mittel zur Strukturierung irgend welcher anderer Daten - insbesondere eines kompletten Dokumentes. Zudem haben sämtliche(!) Attribute, die Du dort verwendest, in HTML nichts verloren: Sie betreffen die Darstellung, und Darstellung ist Sache von CSS. *Nur* von CSS.
Dass Dein Code darüber hinaus invalide ist, sei nur am Rande erwähnt.
Cheatah
[1] Folge: Wenn Du jetzt noch einmal document.write() aufrufst, was an der Stelle keinen Sinn mehr ergibt, wird auf die einzig sinnvolle Weise darauf reagiert: Das aktuelle Dokument wird komplett eliminiert und ein neues angefangen.
Yerf!
Ich gebe die Variable schon aus, weiter unten findet man "document.write(irgendwas);".
das passiert Jahrhunderte vor der Änderung der Variablen.
Du solltest dir einen schnelleren Rechner zulegen... ;-)
Gruß,
Harlequin
Schade das mir keiner Helfen konnte. Kennt jemand ein Forum oder ein gutes Tutorial das hilfrecih ist?
Mahlzeit Jan,
Schade das mir keiner Helfen konnte. Kennt jemand ein Forum oder ein gutes Tutorial das hilfrecih ist?
Forum: dieses hier. Allerdings erfordert es "HTML-Grundkenntnisse, sowie die Bereitschaft, zunächst erst einmal mit der Suchfunktion im Archiv nach ähnlichen Problemen zu suchen" (siehe Startseite, recht weit oben). Da hapert es jedoch anscheinend bei Dir - was ja aber nicht schlimm ist. Verbessere Deine Kenntnisse (wobei man Dir gern hilft), dann wirst Du die Dir angebotenen Hilfen besser verstehen und kommst so zu einem Ergebnis, wie es Dir am meisten hilft: durch "die Energie des Verstehens".
MfG,
EKKi
Hallo Jan,
Schade das mir keiner Helfen konnte. ...
was an meiner Antwort und den darin verlinkten Texten hast du denn nicht verstanden?
Gruß, Jürgen
Mahlzeit Jan,
Ich gebe die Variable schon aus, weiter unten findet man "document.write(irgendwas);".
Richtig. Aber an der Stelle wird die Variable unmittelbar nach bzw. während des Ladens der Seite ausgegeben (wie JürgenB auch schon schrieb]).
Da die Varible die dort ausgegeben wird aber noch den Wert der "initialiserung" hat und leider nicht den Wert der ihr irgendwann zwischendurch zugewiesen wurde, hänge ich an der Stelle.
Zu diesem Zeitpunkt steht ja auch noch nichts in der Variablen drin.
Meiner Meinung nach müsste ich an der Stelle irgendwie überprüfen können ob sich die Variable geändert hat - wenn ja soll der aktuelle Inhalt dort hingeschrieben werden.
Zu dem Zeitpunkt KANN sich die Variable ja noch gar nicht geändert haben. Du hast anscheinend ein grundsätzliches Verständnisproblem, was HTML und Javascript, HTTP-Kommunikation zwischen Server und Client, Rendering, Objektorientierung usw. angeht. Informiere Dich darüber.
Grundsätzlich gilt: eine Seite kommt vom Server, wird vom Browser gerendert und dargestellt. Javascript-Code, der einfach so in der Datei drinsteht, wird zu dem Zeitpunkt ausgeführt. Funktionen werden erst aufgeführt, wenn sie aufgerufen werden. Eventhandler (in Deinem Fall "onclick") werden erst dann gerufen, wenn das Event auch eintritt. Das heißt, erst wenn jemand auf dein <b> klickt, wird die Funktion, die Du im Eventhandler notiert hast, aufgerufen. Zu dem Zeitpunkt ist aber das document.write() schon längst passiert - nämlich beim Laden der Seite.
Du musst in die Funktion "dynmenue1()" (IMHO ein unglücklicher Name, aber zum Testen mag es reichen) also noch irgendeine Form von Ausgabe integrieren. Nur so wird die Variable ausgegeben, nachdem jemand irgendwo draufklickt.
Deswegen der zusammenhang mit der Überwachung der Fenstergröße, dort muss ja schließlich auch irgendwas die ganze Zeit auf eine Änderung überwachen - sowas brauch ich hier glaub ich auch.
Die von Dir notierten Eventhandler überwachen doch die <b>-Elemente ... nutze sie!
while (solange die Seite aktiv ist)
Dein Ansatz ist unglücklich. Eine Seite ist (was die Event-Überwachung angeht) so lange "aktiv", wie sie im Browser angezeigt wird.
if (wenn die Variable einen anderen Wert bekommt)
Überlege, WANN die Variable einen neuen Wert bekommt: wenn irgendwer auf ein <b> klickt. In der Funktion, die dort im Eventhandler notiert ist, musst Du etwas ändern.
schreibe doch bitte den aktuellen Inhalt der Variablen hier hin
Deine Funktion dynmenue1() müsste wissen, wo sie den Wert hinschreiben soll, dann kann sie das auch machen - wenn Du es ihr sagst.
MfG,
EKKi
Hallo Jan,
ich stehe schon seit Ewigkeiten mit Javascript auf Kriegsfuß ...
offensichtlich auch mit html und css
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
> ~~~javascript
> var irgendwas;
> function dynmenue1(x){
> switch (x) {
> case "2":
> irgendwas="22222";
> break;
> case "3":
> irgendwas="33333";
> break;
> case "4":
> irgendwas="44444";
> break;
> case "5":
> irgendwas="55555";
> break;
> default:
> irgendwas="11111";
> break;
> }
> }
>
hier wird der Variablen "irgendwas" durch die Funktion "dynmenue1" in Abhängigkeit von ihrem Übergabeparameter ein Wert zugewiesen. Bis zum ersten Aufruf ist diese Variable nicht definiert.
</script>
<style>
> ~~~css
> body{margin:100px;font-family:Arial;}
>
</style>
</head>
<body onload="dynmenue1()">
nach dem Laden der Seite wird "dynmenue1" ohne Parameter aufgerufen.
> ~~~html
> <table border="1" cellspacing="0" cellpadding="0" align="center">
> <tr>
> <td width="100" align="center"><b onclick="dynmenue1(1)" style="cursor:pointer">LINK1</a></td>
soll das ein <b> sein, das von einem </a> geschlossen werden soll?
> ...
> </tr>
> <tr>
> <td colspan="5" height="500">
> <div style="background-color:green;height:100%;width:100%;">
> <script type="text/javascript">
>
document.write(irgendwas);
hier wird die Variable während des Seitenaufbaus ausgegeben. Zu diesem Zeitpunkt ist sie (noch) nicht definiert.
> ~~~html
> </script>
> </div>
> </td>
> </tr>
> </table>
>
> </body>
> </html>
>
du solltest dir u.A. mal
http://de.selfhtml.org/javascript/objekte/document.htm
und da die getElement...-Methoden und
http://de.selfhtml.org/javascript/objekte/node.htm
ansehen.
Gruß, Jürgen