Script-Ausführung verhindern?
Tina Schreiber
- javascript
Hallo alle miteinander,
ich hoffe mal, dass das hier keine ZU dumme Anfängerfrage ist ... wenn ja, dann sorry ... hab sonst nirgendwo eine Antwort gefunden ...
Also, mein Problem ist folgendes:
Ich habe eine HTML-Seite mit einer Tabelle drin. Diese Tabelle enthält in jeder Zeile einen Link und die Tabelle soll bei Anklicken eines Links neu aufgebaut werden. Dazu hab ich mir eine Javascript-Funktion geschrieben, die auch wunderbar funktioniert. Der Haken ist ... ich benutze diese Funktion auch zum ersten Aufbau der Tabelle (die Seite hat sonst keinen Inhalt), indem ich sie im Body einfach aufrufe. Das geht prima, aber wenn ich jetzt einen der Links in der Tabelle anklicke, wird die neue Tabelle zwar aufgebaut und geschrieben, aber dann kommt wieder der Aufruf im Body und überschreibt mir alles wieder mit der Ursprungsversion. Ich hab mehrere (dutzende *seufz*) Möglichkeiten und Varianten ausprobiert, aber ich kann es nicht verhindern, dass meine schöne neue Tabelle mit der alten wieder überschrieben wird.
Wie kann ich also verhindern, dass der Aufruf im Body ausgeführt wird? Oder anders ausgedrückt, wie erkenne ich, dass eine Seite zum ersten Mal aufgerufen wird (das könnte ich ja als Switch benutzen)? Das würde allerdings nur funktionieren, wenn nach einem Wechsel auf eine andere Seite und dann zurück auf diese, doch wieder der Ursprung ausgeführt wird.
Vielleicht packe ich die ganze Sache ja auch ganz falsch an und zäume das Pferd von hinten auf? Ich hoffe sehr, mir kann jemand helfen und mir einen Tipp geben!!! Falls das eine sehr blöde Frage ist, tut mir leid, ich hab grad erst mit JavaScript angefangen ...
Liebe Grüsse,
Tina
Hallo Tina,
so ganz habe ich Dich nicht verstanden. Poste doch mal ein bisschen Quellcode.
Grüße
Andreas
Hallo Andreas,
so ganz habe ich Dich nicht verstanden. Poste doch mal ein bisschen Quellcode.
So, jetzt hab ich ein bisschen Quellcode zusammengestellt ... unter dem Quellcode gehts dann weiter ... ist aber leider sehr lang geworden ...
**-------------------------------------------------------------
<head>
<script type="text/javascript">
// verschiedene Var-Deklarationen, unter anderem:
var dyntable = "";
var wahl;
function BuildTable(wahl) {
var n = wahlnumbers.length;
for (i=0; i<n; i++) {
// Tabelle zusammenbauen
// hab ich hier nicht zitiert, weil das Stück einwandfrei
// funktioniert. Ich generiere HTML-Code, der in "dyntable"
// gespeichert wird.
};
document.write(dyntable);
};
</script>
</head>
<body>
<a name="top"></a>
<script type="text/javascript">
BuildTable(0);
</script>
</body>
**-------------------------------------------------------------
Der HTML-Code, der in der Function BuildTable generiert wird, wird dort korrekt zusammengebaut. In der Tabelle dann werden Links zusammengestellt, die beispielsweise so aussehen:
<a href="link.html" target="einFrame" onClick="BuildTable(1)">test 1</a>
So weit, so gut ... nur wenn ich das so mache, funktioniert das nur beim ersten Aufbau des Fensters. Nach einem Klick auf einen der Links besteht mein Dokument nur noch aus dem HTML-Code, den ich mir zusammen gestellt habe, also ab "<table>" bis "</table>".
Dann wollte ich ganz besonders schlau sein und hab mir alles in eine Datei gelegt, "BuildTable.js". Dort stelle ich mir nicht nur die Tabelle zusammen, sondern das komplette HTML-Dokument, angefangen bei "<!DOCTYPE HTML PUBLIC " etc bis zum letzten "</html>".
Das funktioniert aber auch nur einmal. Beim Aufbau der ursprünglichen Seite läuft's prima, beim ersten Klick ist auch alles in Ordnung. Aber danach hängt mir der Code nur noch alles hintenan. Das sieht dann so aus:
<!DOCTYPE HTML PUBLIC ...>
... Dokumentinhalt ...
</html>
<!DOCTYPE HTML PUBLIC ...>
... nochmal Dokumentinhalt ...
</html>
Und das, obwohl ich die Variable "dyntable", in der der Code zusammengebaut wird, zwischendurch leer mache.
Jetzt bin ich also völlig ratlos ... *kopfkratz* Ich weiss, es ist höchstwahrscheinlich einer dieser blöden Anfängerfehler, aber leider bin ich halt noch Anfänger und ich häng schon eine halbe Ewigkeit an dem Problem, ohne Erfolge ...
Wäre echt toll, wenn Du bzw. Ihr mir weiterhelfen könntet!!!!
Liebe (verzweifelte) Grüsse,
Tina
..viel text.. ;)
wie wärs denn, wenn du aus einer zwei funktionen machst ?
die erste wird vom body onLoad aufgerufen, die 2. onClick (denk ich mal) von deinen links
gruss
moejoe
wie wärs denn, wenn du aus einer zwei funktionen machst ?
die erste wird vom body onLoad aufgerufen, die 2. onClick (denk
ich mal) von deinen links
Hallo Moejoe,
das mit dem Body onLoad hab ich schon mal probiert. Dummerweise scheint der onLoad jedesmal ausgeführt zu werden, sodass wieder meine schöne Tabelle überschrieben wird.
Ich schreibe die Tabelle mit document.write ins Dokument, wird dabei also jedesmal ein Refresh ausgeführt?
Liebe Grüsse,
Tina
Hallo Tina,
Ich schreibe die Tabelle mit document.write ins Dokument, wird dabei also jedesmal ein Refresh ausgeführt?
Ja, wenn Du sie jedes Mal mit document.write reinschreibst, dann fängt er mit dem Dokument jedes Mal neu an. Dich interessiert in diesem Zusammenhang sicherlich das DHTML-Kapitel von SELFHTML, damit kannst Du schon abgeschlossene Dokumente modifizieren, ist aber allerdings etwas komplizierter.
Grüße,
Christian
Hallo, Christian,
Ja, wenn Du sie jedes Mal mit document.write reinschreibst, dann fängt er mit dem Dokument jedes Mal neu an. Dich interessiert in diesem Zusammenhang sicherlich das DHTML-Kapitel von SELFHTML, damit kannst Du schon abgeschlossene Dokumente modifizieren, ist aber allerdings etwas komplizierter.
Mh, DHTML wollte ich eigentlich vermeiden, gerade wegen der Warnungen in SELFHTML. Die Seite soll einem möglichst grossen Kreis zugänglich sein, und ich muss damit rechnen, dass ältere Browser dabei sind. Ok, das gleiche Argument könnte man für JavaScript anbringen, aber ich denke, zumindest das kann man verwenden.
Liebe Grüsse,
Tina
Moin!
Mh, DHTML wollte ich eigentlich vermeiden, gerade wegen der Warnungen in SELFHTML. Die Seite soll einem möglichst grossen Kreis zugänglich sein, und ich muss damit rechnen, dass ältere Browser dabei sind. Ok, das gleiche Argument könnte man für JavaScript anbringen, aber ich denke, zumindest das kann man verwenden.
Wenn du mit Javascript deine Tabelle änderst, dann _machst_ du bereits DHTML! Javascript und HTML zusammen ist fast immer DHTML - naja, bei Formularprüfungen ist es kein DHTML, aber ansonsten kann man Javascript eigentlich zu fast nichts anderem sinnvoll nutzen.
- Sven Rautenberg
Hallo miteinander!!
So, jetzt hab ich ein bisschen Quellcode zusammengestellt ... unter dem Quellcode gehts dann weiter ... ist aber leider sehr lang geworden ...
**-------------------------------------------------------------
<head>
<script type="text/javascript">
// verschiedene Var-Deklarationen, unter anderem:
var dyntable = "";
var wahl;
function BuildTable(wahl) {
var n = wahlnumbers.length;
for (i=0; i<n; i++) {
// Tabelle zusammenbauen
// hab ich hier nicht zitiert, weil das Stück einwandfrei
// funktioniert. Ich generiere HTML-Code, der in "dyntable"
// gespeichert wird.
};
document.write(dyntable);
};
</script>
</head>
<body>
<a name="top"></a>
<script type="text/javascript">
BuildTable(0);
</script>
</body>
**-------------------------------------------------------------
Der HTML-Code, der in der Function BuildTable generiert wird, wird dort korrekt zusammengebaut. In der Tabelle dann werden Links zusammengestellt, die beispielsweise so aussehen:
<a href="link.html" target="einFrame" onClick="BuildTable(1)">test 1</a>
So weit, so gut ... nur wenn ich das so mache, funktioniert das nur beim ersten Aufbau des Fensters. Nach einem Klick auf einen der Links besteht mein Dokument nur noch aus dem HTML-Code, den ich mir zusammen gestellt habe, also ab "<table>" bis "</table>".
Dann wollte ich ganz besonders schlau sein und hab mir alles in eine Datei gelegt, "BuildTable.js". Dort stelle ich mir nicht nur die Tabelle zusammen, sondern das komplette HTML-Dokument, angefangen bei "<!DOCTYPE HTML PUBLIC " etc bis zum letzten "</html>".
Das funktioniert aber auch nur einmal. Beim Aufbau der ursprünglichen Seite läuft's prima, beim ersten Klick ist auch alles in Ordnung. Aber danach hängt mir der Code nur noch alles hintenan. Das sieht dann so aus:
<!DOCTYPE HTML PUBLIC ...>
... Dokumentinhalt ...
</html>
<!DOCTYPE HTML PUBLIC ...>
... nochmal Dokumentinhalt ...
</html>
Und das, obwohl ich die Variable "dyntable", in der der Code zusammengebaut wird, zwischendurch leer mache.
Jetzt bin ich also völlig ratlos ... *kopfkratz* Ich weiss, es ist höchstwahrscheinlich einer dieser blöden Anfängerfehler, aber leider bin ich halt noch Anfänger und ich häng schon eine halbe Ewigkeit an dem Problem, ohne Erfolge ...
Wäre echt toll, wenn Ihr mir weiterhelfen könntet!!!!
Liebe (verzweifelte) Grüsse,
Tina
Hallo Tina,
Dein Fehler, ist der Einsatz von dokument.write(). Das, was mit der Funktion ausgegeben wird, erscheint immer annstatt des Scriptblockes, von dem aus sie letztendlich aufgerufen wurde.
Die Funktion ist nur dazu geeignet, dynamisch HTML-Code beim Aufbau einer Seite zu generieren, nicht aber dazu, sie später wieder zu ändern.
Ändere dein Script wie folgt ab:
<head>
<script type="text/javascript">
// verschiedene Var-Deklarationen, unter anderem:
var dyntable = "";
var wahl;
function BuildTable(wahl) {
var n = wahlnumbers.length;
for (i=0; i<n; i++) {
// Tabelle zusammenbauen
// hab ich hier nicht zitiert, weil das Stück einwandfrei
// funktioniert. Ich generiere HTML-Code, der in "dyntable"
// gespeichert wird.
};
document.getElementById('test').innerHTML = dyntable;
};
</script>
</head>
<body onload="BuildTable(0)">
<a name="top"></a>
<div id="test">
</div>
</body>
In den Links solltest du BuildTable etwa so aufrufen:
<a href="#" onclick="BuildTable(1);return false">ändern</a>
Was es mit getElementById und innerHTML auf sich hat, ließt Du am besten noch in Selfhtml nach.
Grüße
Daniel
Hallo Tina,
Eine Kleinigkeit zur Ergänzung:
document.getElementById('test').innerHTML = dyntable;
Nicht jeder Browser kennt document.getElementById, also solltest Du noch document.all und
document.layers abfragen und dementsprechend reagieren (dazu findest Du ziemlich viel im Archiv, Stichworte Browserweiche oder Browserabfrage).
Grüße
Andreas