TSchreiber: Eine Funktion für unterschiedliche input Felder nutzen

Hallo zusammen,  ( vorab: ich bin was JavaSrcipt angeht vollkommen neu )

Ich würde gerne eine funtion für unterschiedliche input Felder verwenden wollen, dachte mit daher ich übergebe der Funktion den namen vom input feld und einen Wert.

  
   <script type="text/javascript">  
        function MakeText(FeldName,NText){  
            var target = FeldName;  
            var targetText = target.value;  
            target.value = targetText + ' ' + NText;  
        }  
    </script>  

  
onclick=\"transferText('document.work.name1','Hallo');  
onclick=\"transferText('document.work.name2','Hallo2');  

im obigen Beispiel ist das Formular mit dem Namen "work" versehen und die felden name1 sowie name2 beides vom typ text vorhanden.

aber die Zeile
var target = FeldName;
spricht nicht das entsprechende Feld an.
Habe auch schon folgende kombination versucht:

onclick="transferText('name2','Hallo2');
mit
var target = document.work.FeldName;

Wo steckt denn da mein Gedankenfehler, bzw. der Syntaxfehler drin ?

Danke vorab, und hoffentlich war das nun nicht eine zu dumme Frage

mit besten Grüßen Thomas

  1. Hi,

    aber die Zeile
    var target = FeldName;
    spricht nicht das entsprechende Feld an.

    Natürlich nicht - weil in FeldName nur ein Stringwert steht, steht anschließend in target auch nur ein solcher.

    Habe auch schon folgende kombination versucht:

    onclick="transferText('name2','Hallo2');
    mit
    var target = document.work.FeldName;

    Wo steckt denn da mein Gedankenfehler, bzw. der Syntaxfehler drin ?

    Hier darin, dass du annimmst, statt der Variablen würde ihr Inhalt eingesetzt.

    Entweder Schema 4 verwenden, oder gleich die Referenz auf das Inputfeld als Parameter übergeben (bspw. per this, wenn du die Funktion per click-Event gleich vom Inputfeld aus aufrufst).

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. <script type="text/javascript">
            function MakeText(FeldName,NText){
                var target = FeldName;
                var targetText = target.value;
                target.value = targetText + ' ' + NText;
            }
        </script>

    
    >   
    > transferText('document.work.name1','Hallo');  
      
    
    > aber die Zeile  
    > var target = FeldName;  
    > spricht nicht das entsprechende Feld an.  
      
    Überlege doch nochmal: Welche Datentypen übergibst du deiner Funktion bei transferText('document.work.name1', 'Hallo')? Das zweite Argument, 'Hallo', ist ein Text (String), erkennbar an den Anführungszeichen.  
      
    Welchen Typ hat das erste Argument? Es steht ebenfalls in Anführungszeichen - also auch ein Text.  
      
    In der Variablen target steht also nach  
      
    
    > var target = FeldName;  
      
    der Text 'document.work.name1' und in  
      
    
    > target.value = targetText + ' ' + NText;  
      
    weisst du dann der Eigenschaft target dieses Textes einen Wert zu. Das <input>-Element hast du überhaupt nicht zu fassen.  
      
    
    > Habe auch schon folgende kombination versucht:  
    >   
    > transferText('name2','Hallo2');  
    > mit  
    > var target = document.work.FeldName;  
      
    Schon besser. Du übergibst als erstes Argument statt einer (vermeintlichen) Javascript-Notation nur den Namen des <input>-Elementes.  
      
    Desweiteren greifst statt auf einen Text auf das Objekt document zu, darin auf work, das Formular. Dummerweise nimmst du dann in work den Eintrag namens FeldName - du möchtest aber jenen Eintrag haben, dessen Name \_in\_ der Variablen FeldName steht.  
      
    Kurzum:  
      
    function MakeText(FeldName,NText){  
      var target = document.work.elements[FeldName]; // !!!  
      var targetText = target.value;  
      target.value = targetText + ' ' + NText;  
    }  
      
    Siehe <http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines>, Beispiel 4.  
      
      
    Davon gänzlich unabhängig:  
    Du kannst es dir auch noch einfacher machen: Die Funktion, die beim onclick-Ereignis ausgeführt wird, bekommt automatisch eine Variable namens this, die auf das auslösende Element verweist. Benutze  
      
    onclick="transferText('Hallo2');"  
      
    mit  
      
    function MakeText(NText){  
      this.value = this.value + ' ' + NText;  
    }  
    
    
    1. Viele lieben Dank,
      das ich da einen derben Gedankenfehler habe war mir ja klar nur leider habe ich kein Beispiel gefunden ... ( ich hab wirklich 2 Stunden gesucht )
      Da ich noch nie JavaScript genutzt habe, habe ich noch keine doku komplett gelesen, brauche die Funktion nun einmal und ich glaub das war es dann auch erstmal mit JS für die nächsten Jahre :-D

      Kurzum:

      function MakeText(FeldName,NText){
        var target = document.work.elements[FeldName]; // !!!
        var targetText = target.value;
        target.value = targetText + ' ' + NText;
      }

      Klappt natürlich perfekt ... nochmal vielen Dank

      Davon gänzlich unabhängig:
      Du kannst es dir auch noch einfacher machen: Die Funktion, die beim onclick-Ereignis ausgeführt wird, bekommt automatisch eine Variable namens this, die auf das auslösende Element verweist. Benutze

      onclick="transferText('Hallo2');"

      mit

      function MakeText(NText){
        this.value = this.value + ' ' + NText;
      }

      So einen Ansatz hatte ich gefunden, nur das ich das onclick nicht am Imputfeld verwende sondern in einem anderen Teil des Dokumentes, wo kein bezug zum Feld mehr vorhanden ist

      Nochmals Danke für die Antworten,
      mhmmmm evtl. lese ich mich doch mal komplett in die Materie ein; wird wohl auch nicht Schaden und das Wochenende ist ja nah

      Gruß Thomas