.innerHTML und Seite wird neu geladen

exitium

Grünschnabel
Hi,

mein Problem ist jetzt folgendes.

Ich lade in einer index.php mittels ajax externe Seiten (wo es keine fehler gibt).

Ich hatte zuerst in einer dieser externen Seiten folgenden javascript-code (das wird durch php generiert) gehabt:

Code:
 <script type="text/javascript">
          jmolMenu([["","Hintergrundfarbe","true"],
                    ["background black;","schwarz"],
                    ["background white;","weiss"], 
                    ["background gray;","grau"],
                    ["background blue;","blau"],
                    ["background red;","rot"],
                    ["background yellow;","gelb"]],1);
</script>
diese js wird natürlich nicht ausgeführt wenn es in der index.php durch ajax in ein div geladen wird.

Ich hab darauf hin den Inhalt der externen Datei wie folgt umgeändert:
Code:
            jmolMenu([["","Hintergrundfarbe","true"],
                     ["background black;","schwarz"],
                     ["background white;","weiss"], 
                     ["background gray;","grau"],
                     ["background blue;","blau"],
                     ["background red;","rot"],
                     ["background yellow;","gelb"]],1);
Die index.php hab ich wie folgt angepasst:


Code:
 a = document.createElement('script');
 a.setAttribute('type','text/javascript');
 a.innerHTML=das_von_oben
 getElement("id",das_div).appendChild(a);
das Problem ist jetzt das der Browser die seite neu lädt, wo sich aber nur noch der code von oben drinne befindet.

was muss ich machen, damit das js an der entsprechenden stelle in der index.php steht und auch funktioniert?

MfG exit
 
Zuletzt bearbeitet:
meinst du jetzt an stelle von:


Code:
 getElement("id",das_div).appendChild(a);

nur

Code:
eval(a);

schreiben?

wenn ja, dann klappt es nicht.

PS: vielleicht noch als Anmerkung, das jmolMenu ist ein drop-down-menue, welches dann erscheinen sollte. Wenn ich dann einen Eintrag auswähle wird im Jmol-applet die Hintergrundfarbe geändert.
 
Etwas mehr Infos als "geht nicht" müsstest du schon mal rüberwachsen lassen ;)
Was besagt die Fehlerkonsole?

Dass es geht, zeigt dir folgendes Beispiel:
Code:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function jmolMenu()
{
alert('geht');
}

window.onload=function()
{
  eval(document.getElementsByTagName('body')[0].innerHTML);
}
//-->
</script>
<style type="text/css">
<!--
-->
</style>
</head>
<body>
jmolMenu([["","Hintergrundfarbe","true"],
                     ["background black;","schwarz"],
                     ["background white;","weiss"], 
                     ["background gray;","grau"],
                     ["background blue;","blau"],
                     ["background red;","rot"],
                     ["background yellow;","gelb"]],1);
</body>
</html>
Dort wird genau derselbe String, der lt. deiner Aussage bei dir per eval() ausgeführt wird, ausgeführt....und wie du beim Testen merken wirst, funktioniert es.

Also ist entweder der übergebene String bei dir nicht der, den du vorgibst, oder die Funktion erwartet etwas anderes, oder...weissdergeier.:eek:
 
also, die Fehler-Konsole gibt keine Fehler aus aber es macht nicht das was es machen sollen.

ich hab gerade gesehen, das dort noch eine Javascript datei fehlt, damit man sich besser vorstellen kann wie alles aussehen soll; das ist aber nicht der Grund warum es nicht richtig geht!

ich hab mal 2 Beispiele online gebracht die das Problem besser veranschaulichen sollen:

also die erste Datei sieht wie folgt aus:

HTML:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--

//-->
</script>
<script src="./dateien/jmol/Jmol.js" type="text/javascript"> </script>
<style type="text/css">
<!--
-->
</style>
</head>
<body>
<div id="test">
<script type="text/javascript">
jmolMenu([["","Hintergrundfarbe","true"],
                     ["background black;","schwarz"],
                     ["background white;","weiss"], 
                     ["background gray;","grau"],
                     ["background blue;","blau"],
                     ["background red;","rot"],
                     ["background yellow;","gelb"]],1);
</script>
</div>
<div id="test2">hallo</div>
</body>
</html>

anzuschauen unter test2.html

man beachte das unter dem drop-down-menü das div mit "hallo" steht bzw. auch angezeigt wird.


Jetzt die 2te Datei mit dem was du mir vorgeschlagen hast:

HTML:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function jmolMenu()
{
alert('geht');
}

window.onload=function()
{
  eval(document.getElementsByTagName('div')[0].innerHTML);
}
//-->
</script>
<script src="./dateien/jmol/Jmol.js" type="text/javascript"> </script>
<style type="text/css">
<!--
-->
</style>
</head>
<body>
<div id="test">

jmolMenu([["","Hintergrundfarbe","true"],
                     ["background black;","schwarz"],
                     ["background white;","weiss"], 
                     ["background gray;","grau"],
                     ["background blue;","blau"],
                     ["background red;","rot"],
                     ["background yellow;","gelb"]],1);

</div>
<div id="test2">hallo</div>
</body>
</html>

anzuschauen unter test.html

man beachte das das div mit dem inhalt "hallo" nicht mehr angezeigt wird. Da durch den eval Aufruf scheinbar die ganze Seite neu geladen wird, aber nur noch mit den js-zeug

es soll aber wie bei test2.html aussehen!
 
Dieses Skript benutzt write(), um das Dokument zu ändern.
Wird write() nach dem Laden der Seite aufgerufen, wird der bisherige Inhalt des Dokumentes überschrieben.
Kurzum: du kannst dieses Skript nicht benutzen, um den Seiteninhalt nach dem Laden der Seite zu Ändern.
 
und was kann man da jetzt machen?

bei dem von oben wird aber kein write benutzt (zumindest nicht mit der grobheit von write) und es passiert das selbe:

Code:
a = document.createElement('script');
 a.setAttribute('type','text/javascript');
 a.innerHTML=das_von_oben
 getElement("id",das_div).appendChild(a);
 
Zuletzt bearbeitet:
also ich hab das Problem gefunden, der entscheidene hinweis wurde mir in einem anderem Forum gegeben. In der eingelesenen js-Datei auf die das jmolMenü zugreift war ein write versteckt. *arg*

ich hab diese js-datei nicht selber geschrieben ... hab sie jetzt angepasst und es geht.

Danke für die Hilfe, die ich hier bekommen habe
 
Zurück