tina: eval-anweisung geht nur zusammen mit alert-meldung

Hallo,
ich hoffe ihr könnt mir helfen.
ich sitzt schon eine weile an folgendem problem.
ich benutzte eine eval-anweisung um eine select-box mit optionen wieder zufüllen.
dabei soll ein bestimmter eintrag(xy) makiert werden.
und es funktioniert alles wunderbar wenn ich eine alert-meldung ausgeben lasse.
wenn keine alert-meldung kommt, dann makiert er mir irgendwas.
ich habe schon versucht die anweisung ohne eval hinzubekommen, aber das klappte nicht.
kann mir jemand helfen oder zeigen wie ich die anweisung ohne eval hin bekommen.

vielen Dank im voraus.
tina

<script src="test.js" type="text/javascript"></script>
<script language="JavaScript" type="text/JavaScript">

testarray[0][0] = "1";
   testarray[0][1] = "grasgrün";
  testarray[0][2] = "1";

testarray[1][0] = "4";
   testarray[1][1] = "Silber";
   testarray[1][2] = "1";

testarray[2][0] = "2";
   testarray[2][1] = "rot";
   testarray[2][2] = "2";

testarray[3][0] = "5";
   testarray[3][1] = "blau";
   testarray[3][2] = "2";

testarray[4][0] = "7";
   testarray[4][1] = "grasgrün";
   testarray[4][2] = "2";

function testEval()
{
 //alert("drin");
 xy = 4;
 for(index = 0; index< testarray.length; index++)
 {
  var text =testarray[index][1];

if(testarray[index][0] == xy)
  {
   insertOption("auswahl",String(text),true,testarray[index][0])

}else
  {
   insertOption("auswahl",String(text),false,testarray[index][0])

}
 }

}
</script>
</head>

<body>

<form name="form1" action="" method="get">
  <select name="auswahl" size="1">
    <option value="1">hallo</option>
    <option value="2">du</option>
    <option value="3">da</option>
  </select>
</form>
<script type="text/javascript">
testEval()
</script>

</body>
</html>

//in der test.js

function insertOption(para,Wert,selected,para2)
{

NeuerEintrag = new Option(Wert,para2,selected,selected);

//  alert("wenn diese meldung kommt, dann geht es");

help = "document.forms['form1'].elements['"+para+"'].options[document.form1."+para+".length] = NeuerEintrag";
 eval(help);

}

  1. function insertOption(para,Wert,selected,para2)
    {

    NeuerEintrag = new Option(Wert,para2,selected,selected);

    //  alert("wenn diese meldung kommt, dann geht es");

    help = "document.forms['form1'].elements['"+para+"'].options[document.form1."+para+".length] = NeuerEintrag";
     eval(help);

    }

    eval ist hier absolut nicht nötig (wo habt ihr das eigentlich alle her? ich kenn keine Doku in der eval verwendet wird um einfache document oder window Zugriffe zu machen)

    var tmp = document.forms['form1'].elements[para];
    help = tmp.options[tmp.length] = NeuerEintrag;

    Ansonsten läßt sich din Problem so wie du es schilderst nicht nachvoll ziehen, was ist denn die Fehlermeldung? was für Werte haben die Paramter? Was für eine Wert hat document.forms['form1']?

    struppi.

    1. Hallo Struppi,

      eval ist hier absolut nicht nötig (wo habt ihr das eigentlich alle her? ich kenn keine Doku in der eval verwendet wird um einfache document oder window Zugriffe zu machen)

      Ich aber: http://selfhtml.teamone.de/dhtml/modelle/anzeige/ichkreis.htm

      Da hatte ich es her, ich weiß noch, dass ich mich vor einiger Zeit darüber auch mal mit dir gezofft habe.
      Du hast ja so recht ;-))

      Grüße aus Barsinghausen,
      Fabian

  2. Hallo tina,

    ich habe dir mal einen Vorschlag kommentiert, und hoffe, du kommst mit den spärlichen Kommentaren klar:

    <script type="text/javascript">

    var neu, testarray;

    function init() {

    neu = document.form1.auswahl;
     testarray = new Array(5); // Array definieren

    for (var i = 0; i < 5; i++) {
      testarray[i] = new Array(); // mehrdimensionales Array definieren
     }

    testarray[0][0] = ["1", "eins"]; // so hast die Möglichkeit, value und text zu ändern
      testarray[0][1] = ["grasgrün", "text"];
      testarray[0][2] = ["1", "eins"];

    testarray[1][0] = ["4", "vier"];
      testarray[1][1] = ["Silber", "text"];
      testarray[1][2] = ["1", "eins"];

    testarray[2][0] = ["2", "zwei"];
      testarray[2][1] = ["rot", "text"];
      testarray[2][2] = ["2", "zwei"];

    testarray[3][0] = ["5", "fünf"];
      testarray[3][1] = ["blau", "text"];
      testarray[3][2] = ["2", "zwei"];

    testarray[4][0] = ["7", "sieben"];
      testarray[4][1] = ["grasgrün", "text"];
      testarray[4][2] = ["2", "zwei"];
    }

    function testEval(sel) {

    neu.length = 0; // Aktuelle options loeschen

    for(var i = 0; i < testarray[sel].length; i++) { // Liste neu aufbauen
      neu[i] = new Option(testarray[sel][i][1], testarray[sel][i][0]);
      neu[i].selected = true; //  Eintrag selektieren
     }
    }
    /* Hier weiss ich nicht, was du vorhast: Sollen die vorhandenen options gelöscht und durch neue ersetzt werden, oder sollen die neuen unten drangehängt werden?  Welcher Eintrag soll selektiert werden? Auf jeden Fall siehst du, wie man das Ganze um ein paar unnötige Funktionen kürzen kann und wie man ohne eval auskommt.*/

    </script>
    </head>

    <body onload="init()">

    <form name="form1" action="">
      <select name="auswahl" size="1" onchange="testEval(this.options.selectedIndex)">
        <option value="1">hallo</option>
        <option value="2">du</option>
        <option value="3">da</option>
      </select>
    </form>

    </body>
    </html>

    Grüße

    pi