Axel Richter: Verbesserung: test=new activity("Titel"); writeTitle(test);

Beitrag lesen

Hallo,

Jetzt habe ich jedoch ein ganzes Feld mit solchen activities. Das Script sieht dann so aus:

function writeTitle(a){
  window.document.write("<a href="javascript:edit("+a+");">"+eval(a).title+"</a></br>");
 }

1. eval is evil
2. a ist hier ein String "test[i]". In edit(test[i]) ist da i aber nicht mehr bekannt, weshalb test[i] undefiniert ist, also auch keine Eigenschaft title hat.
3. Du brauchst ein global gültiges Array mit activities und als Zeiger für die einzelnen activities deren id im Array.

So etwa:

<script type="text/javascript">
<!--
 var test = new Array(); //Globales Array der Aktivitäten

function activity(id, title){
  this.id = id;
  this.title = title;
 }

function edit(a){
  alert(a.title);
 }

function writeTitle(a){
  window.document.write("<a href="javascript:edit(test[" + a.id + "]);">" + a.title + "</a><br>");
 }

for (var i=0; i<5; i++){
  test[i]=new activity(i, "Titel Aktivität Nr.: " + i);
  writeTitle(test[i]);
 }
//-->
</script>

Die Frage ist allerdings, ob es so gut ist, so etwas mit JavaScript zu erledigen. Clientseitiges JavaScript kann nichts in Datenbanken bzw. Dateien auslagern. Es muss also das gesamte Array der activities im Arbeitsspeicher verwalten. Bei solchen Scripten kommt es schnell zu hohen Speicher- und Prozessorauslastungen, bis hin zu Abstürzen des Browsers.

viele Grüße

Axel