piet: eval() oder was?

Hallo Forum,

ich möchte mit einer Javascriptfunktion Formularfelder ansprechen. Dabei wird der Feldname als Parameter an die Funktion übergeben. Das sollte nach meinen (geringen)Javascript-Kenntnissen mit Hilfe von eval() möglich sein. Bin nach Archivsuche mitlerweile bei folgendem (auf das Problem reduzierten) Code angekommen:

===========================================================
<html><head><title>Unbenannt</title>
<script language="JavaScript1.2">
function test(field) {

//so funktioniert es
  //document.form1.feld1.value='blabla'

//die folgenden Varianten leider nicht
  eval("document.form1." + field + ".value='blabla'");
  //eval("document.forms.form1.elements[" + field + "].value='12345'");
 }
</script>

</head>
<body>

<form action="" name="form1">
<input type="text" name="feld1">
<input type="button" value="test" onClick="test(feld1)">
</form>

</body>
</html>

Was mach ich da falsch??

Danke schon mal fürs Lesen

piet

  1. Hi,

    Dabei wird der Feldname als Parameter an die Funktion übergeben.

    document.form1.elements[name]

    mit Hilfe von eval()

    eval() is evil(). In jeder Sprache - auch wenn es in JavaScript sehr wenig auffällt. Verzichte darauf, wann immer Du das gleiche auch mit anderen Mitteln irgendwie erreichen kannst.

    Cheatah

    1. Hi Cheatah,

      document.form1.elements[name]

      wenn du das meinst:

      <script language="JavaScript1.2">
      function test(field) {
      eval("document.form1.elements[" + field + "].value='blabla'");
       }
      </script>

      funktionierts leider auch nicht.

      eval() is evil(). In jeder Sprache - auch wenn es in JavaScript sehr wenig auffällt. Verzichte darauf, wann immer Du das gleiche auch mit anderen Mitteln irgendwie erreichen kannst.

      Hast du da einen anderen Lösungsansatz für mich??

      Danke schon mal

      piet

      1. Hi,

        document.form1.elements[name]

        wenn du das meinst:
        eval("document.form1.elements[" + field + "].value='blabla'");

        nein, ich meine document.form1.elements[name], deswegen schrieb ich das. "name" heißt bei Dir "field".

        Cheatah

        1. Hallo Cheatah,

          folgendes funktioniert nun und ist einigermassen flexiebel.

          <script language="JavaScript1.2">
          function eintest(form,feld) {
            document.forms[form].elements[feld].value='blabla';
           }
          </script>

          Allerding klappt es nur, wenn ich die Array-nummer übergebe, die Namen von Form und Element als Parameter liefern weiterhin Fehler. In meinem realen (nicht reduzierten) Problem generiert sich die Anzahl der Form-Elemente aber dynamisch und ich möchte daher gerne mit name="xyz" arbeiten.

          Kennt da jemand noch ne Lösung?

          Auf jeden Fall schon mal Danke für eure Hilfe!!!

          piet

          1. Hi,

            Allerding klappt es nur, wenn ich die Array-nummer übergebe, die Namen von Form und Element als Parameter liefern weiterhin Fehler.

            hast Du Calocybes Entdeckung beachtet? onMouseOver="bla(blub)" übermittelt der Funktion bla() die _Variable_ blub, nicht den _String_ "blub".

            Ansonsten: Zu einer Fehlerbeschreibung gehört als allererstes die Fehlermeldung...

            Cheatah

      2. <script language="JavaScript1.2">
        function test(field) {

        [...]

        funktionierts leider auch nicht.

        Es gibt in JS schon eine Funktion test(). Versuch doch mal 'nen anderen Namen.

        By
        Reinhard

  2. Hi!

    <form action="" name="form1">
    <input type="text" name="feld1">
    <input type="button" value="test" onClick="test(feld1)">

    ^^^^^
    Hast Du denn eine Variable namens feld1? Oder meintest Du vielleicht die Zeichenkette "feld1"? (Antwort: Ja!)

    Zugriff dann ohne eval() mit
      document.forms["form1"].elements[field].value

    Noch einfacher ist es, wenn Du statt dem Feldnamen (zu dem Du ja auch noch den Formularnamen wissen musst, damit der was nuetzt) einfach das Feld selbst als Objekt uebergibst:
      <input type="button" value="test" onClick="test(this.form.feld1)">
    Die Funktion nimmt dieses Objekt dann:
      function test(textfield)
    und greift direkt darauf zu:
      textfield.value='blabla';

    So long

    --
    Alle Verallgemeinerungen sind falsch.