| 

.NET C# Java Javascript Exception

1
Hallo,

ich stehe gerade vor einem Problem bei dem es darum geht, Javascript Werte zu verändern. Die neuen Werte kommen dabei aus einem Block, der dynmaisch per AJAX nachgeladen wird. Nun beinhaltet der HTML Code der nachgeladen werden soll auch ein Script das ausgeführt werden soll. Ich habe das mal in einem Mini-Beispiel versucht zu erläutern.

<html>
<head>
<script type="text/javascript">
var selectedIndex = 0;
</script>
</head>
<body>
<input type="button" onClick="loadContent()">
<input type="button" onClick="alert( selectedIndex )">
<div id="content">

</div>

<!-- Wird per AJAX in "content" nachgeladen
<script type="text/javascript">
selectedIndex = 1;
</script>
<b>Fertig</b>
-->

</body>
</html>


Gehen wir davon aus, dass die Funktion loadContent HTML Code per AJAX nachläd und in den Container content läd. In dem Falle, den Code der in dem auskommentiertem Bereich steht. Was ich nun erreichen möchte, ist das ein Klick auf den Button mit der Messagebox solange die 0 ausgibt, bis ich die Funktion loadContent per Klick habe ausführen lassen. Dann soll die 1 ausgegeben werden.

Gibt es eine gute Möglichkeit eine JS-Function die sich in dem nachgeladenen Content befindet auszuführen?

Grüße
News:
29.08.2012
Slashi 409 2 8
1 Antwort
1
30.08.2012
Matthias Hlawatsch 13,2k 4 9
In dem kleinen Scenario läuft das so super, nur leider nicht in der tatsächlichen Anwendung. Dort bekomme ich per Firebug die Fehlermeldung das die entsprechende Funktion nicht gefunden werden konnte. Kann es damit zu tun haben, dass der HTML Inhalt per AJAX (XMLHttpRequest) nachgeladen wird? Der Aufruf der Funktion erfolgt natürlich nachdem der Inhalt in den Container gesetzt wurde.
Slashi 30.08.2012
Ich habe mir erst einmal anderweitig weiterhelfen müssen. Ich extrahiere nun das Script mit String Operationen und führe dies dann per eval() aus. Prinzipiel sollte deine Variante aber die richtige Lösung sein. Gruß & Danke!
Slashi 30.08.2012
Wie schreibst Du in das div? Beim Schreiben von innerHTML wird das Skript nicht ausgeführt (Spec: http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0 ). Nur mit der html-Funktion von jQuery funktioniert das Beispiel (das war mir erst gar nicht so bewußt, ehrlich gesagt). Die ist etwas komplizierter als nur innerHTML zu beschreiben, aber auf die Schnelle in den jQuery-Sourcecode geschaut bin ich mir nicht sicher, wo das Skript ausgeführt wird. Evtl. liegt es daran, dass jQuery manchmal appendChild statt innerHTML benutzt. In der jQuery-Doku habe ich leider nichts dazu gefunden.
Matthias Hlawatsch 30.08.2012

Stelle deine Javascript-Frage jetzt!