Hallo,
ich lade mit einem Maus-Klick Inhalte (HTML-Elemente, Formulare) per AJAX in ein DIV nach. Jetzt möchte ich aber auch Javascript mit dem Ajax-Nachladen im nachgeladenen Bereich ausführen. Das funktioniert (natürlich) nicht, da ein Update per Ajax wohl die Scriptausführung verhindert. Jetzt habe ich verschiedene Möglichkeiten gefunden, wie man das Problem eventuell lösen kann: JQuery, equal() ... doch einerseits verstehe ich das nicht ganz und jQuery möchte ich umgehen ... und natürlich auch ganz gern verstehen. Und wofür das ganze? Die nachgeladenen Ebenen können Editoren. Farbwähler ... enthalten, die beim Aufruf per JS Formular-Elemente oder DIVs beeinflussen.
Ganz grob geht es also darum, ein DIV nachzuladen, welches eben andere Elemente und zumindest ein auszuführendes Script enthält. Vielleicht kann mich hier jemand auf den richtigen Weg bringen.
Die "Seite"
der nachzuladende Bereich mit einem Beispielscript (indajax(.html))
der AJAX-Part (design_functions.js)
... ich habe das Ganze versucht möglichst zu vereinfachen.
Wie kann ich es hinbekommen, dass HTML-Elemente kombiniert mit JS nachgeladen werden kann, ohne dass das JS seine Funktionalität verliert?
ich lade mit einem Maus-Klick Inhalte (HTML-Elemente, Formulare) per AJAX in ein DIV nach. Jetzt möchte ich aber auch Javascript mit dem Ajax-Nachladen im nachgeladenen Bereich ausführen. Das funktioniert (natürlich) nicht, da ein Update per Ajax wohl die Scriptausführung verhindert. Jetzt habe ich verschiedene Möglichkeiten gefunden, wie man das Problem eventuell lösen kann: JQuery, equal() ... doch einerseits verstehe ich das nicht ganz und jQuery möchte ich umgehen ... und natürlich auch ganz gern verstehen. Und wofür das ganze? Die nachgeladenen Ebenen können Editoren. Farbwähler ... enthalten, die beim Aufruf per JS Formular-Elemente oder DIVs beeinflussen.
Ganz grob geht es also darum, ein DIV nachzuladen, welches eben andere Elemente und zumindest ein auszuführendes Script enthält. Vielleicht kann mich hier jemand auf den richtigen Weg bringen.
Die "Seite"
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<SCRIPT LANGUAGE="JavaScript" SRC="intranet_data/design_functions.js"></SCRIPT>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" class="hggrau-e8e8e8" >
<div style="width:0px; height:0px;" id="editordiv"></div>
<div style="position:absolute; height:20px; width:40px; top:35px; left:35px;" onclick="Loader.register('editordiv|indajax|166;58;7;;1;1|1|5')"></div>
</body>
</html>
der nachzuladende Bereich mit einem Beispielscript (indajax(.html))
HTML:
<div id="teilvonirgendwas" style="height:100px; width:100px;">
<script>alert('Hello');</script>
</div>
der AJAX-Part (design_functions.js)
Code:
// AJAX DATA //////////////////////
var LoaderObject = function()
{
this.connection = false;
this.running = false;
this.requestQueue = new Array();
this.requestCounter = 0;
this.requestQueueCounter = 0;
};
LoaderObject.prototype.initialize = function()
{
if (window.XMLHttpRequest)
{
this.connection = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
this.connection = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
this.connection = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
return false;
}
}
}
return true;
};
LoaderObject.prototype.runRequest = function()
{
if(this.running)
{
return false;
}
if(!this.connection)
{
var reconnected = this.initialize();
if(!reconnected)
{
return false;
}
}
this.running = true;
var request = this.requestQueue[this.requestCounter];
if
(
!request['url'] ||
!request['elementId'] ||
!request['art']
)
{
return false;
}
try
{
this.connection.open('GET', request['url'], true);
}
catch(e)
{
return false;
}
this.connection.onreadystatechange = function()
{
if (Loader.connection.readyState == 4)
{
if (Loader.connection.status == 200)
{
if(Loader.requestQueue[Loader.requestCounter].art == 1)
{
document.getElementById(Loader.requestQueue[Loader.requestCounter].elementId).innerHTML = Loader.connection.responseText;
}
if(Loader.requestQueue[Loader.requestCounter].art == 2)
{
window.parent.document.getElementById(Loader.requestQueue[Loader.requestCounter].elementId).innerHTML = Loader.connection.responseText;
}
Loader.requestCounter++;
Loader.requestQueueCounter--;
if (Loader.requestQueue.length > Loader.requestCounter)
{
Loader.running = false;
setTimeout("Loader.runRequest()",100);
}
else
{
Loader.running = false;
Loader.requestQueue = new Array();
Loader.requestCounter = 0;
Loader.requestQueueCounter = 0;
}
}
else
{
alert('connection error : '+Loader.connection.status);
}
}
};
this.connection.send(request['send']);
return true;
};
LoaderObject.prototype.add = function(requestObject)
{
var requestsParams = requestObject.split('|');
this.requestQueue[this.requestQueue.length] = {
'elementId' : requestsParams[0] || false,
'url' : requestsParams[1] + ".html?idx=" + requestsParams[2] + "&xi=" + requestsParams[4] || false,
'para' : requestsParams[2] || false,
'art' : requestsParams[3] || false,
'anwendungid' : requestsParams[4] || false
};
this.requestQueueCounter++;
}
LoaderObject.prototype.register = function(request)
{
if(typeof(request) != 'string')
{
return false;
}
var requestObjects = request.split(',');
if(typeof(requestObjects) == 'object')
{
for(var index in requestObjects)
{
this.add(requestObjects[index]);
}
}
if
(
!this.running &&
this.requestQueueCounter > 0
)
{
this.runRequest();
}
return null;
};
var Loader = new LoaderObject();
... ich habe das Ganze versucht möglichst zu vereinfachen.
Wie kann ich es hinbekommen, dass HTML-Elemente kombiniert mit JS nachgeladen werden kann, ohne dass das JS seine Funktionalität verliert?