d3nn1s: Dynamisches Auslesen von Werten und Übergabe an Funktion

Hallo zusammen,

ich stehe ich hier vor einem Problem, wo ich aktuell keinen Ansatz finde dies zu lösen.

Ich möchte eine variable Anzahl an Daten aus Texteingabefeldern auslesen (was auch soweit problemlos funktioniert). Diese Daten möchte ich an eine Funktion übergeben. Und dort ist mein Problem.

Wenn ich die Variable mit allen Daten an die Funktion übergeben, erkennt die Funktion diese Variable allerdings nicht als einzelne Parameter, sondern nur als einen Parameter. Ich benötige die Daten aber als einzelne, mehrere Parameter.
Ich habe bereits Versuche mit der Umklammerung von Hochkommata unternommen, was aber das Ergebnis nicht wie gewünscht verändert.

Hat jemand einen Ansatz dieses Problem zu lösen oder ist es einfach nicht möglich?

Viele Grüße und vielen Dank für Eure Hilfe bereits im Voraus.

Dennis

  1. Hat jemand einen Ansatz dieses Problem zu lösen oder ist es einfach nicht möglich?

    Zumindest nicht Anhand deiner Beschreibung. Denn natürlich kannst du einer Funktion mehrere Parameter übergeben.

    Struppi.

    1. Zumindest nicht Anhand deiner Beschreibung. Denn natürlich kannst du einer >>Funktion mehrere Parameter übergeben.

      Struppi.

      Dies war ja auch nicht die Frage. ;-)

      Mir gelingt es nicht, die unterschiedliche Anzahl an Werten an die Funktion zu übergeben, da dir Übergabe mit immer einen Paramter draus macht, anstatt x Paramater.

      Viele Grüße
      Dennis

      1. Zumindest nicht Anhand deiner Beschreibung. Denn natürlich kannst du einer >>Funktion mehrere Parameter übergeben.

        Warum veränderst du den Text so, dass er nicht mehr als Zitat kenntlich ist?

        Struppi.

        und du musst auch nicht alles stehen lassen, es reicht das worauf du Antworten möchtest.

        Dies war ja auch nicht die Frage. ;-)

        Dann verstehe ich die Frage nicht.

        Mir gelingt es nicht, die unterschiedliche Anzahl an Werten an die Funktion zu übergeben, da dir Übergabe mit immer einen Paramter draus macht, anstatt x Paramater.

        Auch dieser Satz macht wenig Sinn für mich. Zeig doch einfach ein Beispiel anhand dessen man erkennen kann wovon du sprichst?

        Struppi.

        1. Auch dieser Satz macht wenig Sinn für mich. Zeig doch einfach ein Beispiel anhand dessen man erkennen kann wovon du sprichst?

          function doSomething()
          {
           var noOfEntries = document.getElementById('list').childNodes.length;
           var tempArray = new Array();
           for(var a=0;a < noOfEntries ;a++)
           {
            tempArray = tempArray.concat(document.getElementById('list').childNodes[a].firstChild.nodeValue);
           }

          /* Übergabe an die Funktion: So funktioniert es, nur dass ich nicht weiß, wie ich es vermeide tempArray[0], tempArray[1]... zu schreiben, da die Anzahl der Werte ja unbekannt ist. */

          setData(para1,para2,para3,para4,tempArray[0],tempArray[1],tempArray[2],tempArray[3]);
          }

          1. Auch dieser Satz macht wenig Sinn für mich. Zeig doch einfach ein Beispiel anhand dessen man erkennen kann wovon du sprichst?

            function doSomething()
            {
            var noOfEntries = document.getElementById('list').childNodes.length;
            var tempArray = new Array();
            for(var a=0;a < noOfEntries ;a++)
            {
              tempArray = tempArray.concat(document.getElementById('list').childNodes[a].firstChild.nodeValue);

            Bist du sicher, das du weißt was du da tust?

            Du kopierst hier ständig das Array um, nur weil du einen Wert hinzufügen möchtest. Das geht effektiver mit push()

            Ausserdem ist der Zugriff auf den Wert falsch.

            Daneben ist das arbeiten mit childNodes sehr riskant, da manche Browser unterschiedliche Vorstellungen von childNodes haben, kannst du nicht genauer definieren auf was du zugreifen möchtest? z.b. getElementsByTagName('input') o.ä.?

            /* Übergabe an die Funktion: So funktioniert es, nur dass ich nicht weiß, wie ich es vermeide tempArray[0], tempArray[1]... zu schreiben, da die Anzahl der Werte ja unbekannt ist. */

            setData(para1,para2,para3,para4,tempArray[0],tempArray[1],tempArray[2],tempArray[3]);

            Du hast hier zwei Möglichkeiten
            a. tempArray direkt übergeben
            b. Mit arguments arbeiten.

            Struppi.

            1. Bist du sicher, das du weißt was du da tust?

              Du kopierst hier ständig das Array um, nur weil du einen Wert hinzufügen möchtest. Das geht effektiver mit push()

              Ok, das kann ich ändern. Dessen war ich mir nicht bewußt. Ich wollte immer den aktuell ausgelesenen Wert einfach dem Array hinzufügen.

              Ausserdem ist der Zugriff auf den Wert falsch.

              Nö. Der Wert ist richtig. Ist jetzt kompliziert zu erklären. Ich weiß, dass man auf Werte aus Textfeldern mit .value zu greift. Das ist aber jetzt nicht relevant. Die Funktion ist noch nicht komplett.

              Daneben ist das arbeiten mit childNodes sehr riskant, da manche Browser unterschiedliche Vorstellungen von childNodes haben, kannst du nicht genauer definieren auf was du zugreifen möchtest? z.b. getElementsByTagName('input') o.ä.?

              Hmm, das war mir nicht bewußt bislang. Zumindest der Firefox, IE8 und der Opera geben mir dasgleiche Ergebnis. Der Chrome allerdings nicht. Dann muss ich dies umschreiben.

              Du hast hier zwei Möglichkeiten
              a. tempArray direkt übergeben
              b. Mit arguments arbeiten.

              Lösung a) funktioniert leider nicht. Die Funktion behandelt die Übergabe als ein Wert und nicht als getrennte Werte.

              b) musst du mir näher erläutern, wie das praktisch aussehen soll.

              Gruss
              Dennis

              1. Hallo,

                Du hast hier zwei Möglichkeiten
                a. tempArray direkt übergeben
                b. Mit arguments arbeiten.
                Lösung a) funktioniert leider nicht. Die Funktion behandelt die Übergabe als ein Wert und nicht als getrennte Werte.

                ja natürlich, das ist ja der Sinn der Sache - die Funktion "sieht" einen Parameter, nämlich das Array. Innerhalb der Funktion kannst du aber mit der length-Eigenschaft die Anzahl der Elemente im Array abfragen, und mit einem Index 0..(length-1) gezielt und komfortabel auf die Elemente zugreifen.
                Wo liegt dein Problem?

                b) musst du mir näher erläutern, wie das praktisch aussehen soll.

                Eine Javascript-Funktion kann mit arguments.length abfragen, wieviele Parameter ihr übergeben wurden, und (analog zum oberen Fall) mit arguments[0] bis arguments[n-1] (mit n=arguments.length) auf die Werte zugreifen.
                Hilft dir aber AFAIS nichts, weil du zunächst eine klare Aufrufschnittstelle brauchst.

                So long,
                 Martin

                --
                Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Beim Universum bin ich mir aber nicht ganz sicher.
                  (Albert Einstein, deutscher Physiker)
                1. ja natürlich, das ist ja der Sinn der Sache - die Funktion "sieht" einen Parameter, nämlich das Array. Innerhalb der Funktion kannst du aber mit der length-Eigenschaft die Anzahl der Elemente im Array abfragen, und mit einem Index 0..(length-1) gezielt und komfortabel auf die Elemente zugreifen.
                  Wo liegt dein Problem?

                  Ja, so werde ich es wahrscheinlich machen müssen.
                  Ich habe mich halt gefragt, ob es eine Möglichkeit gegeben hätte die Werte auf diese Weise zu übergeben ohne, dass ich eine feste Anzahl vordefiniere:

                    
                  setData(para1,para2,para3,para4,tempArray[0],tempArray[1]...);  
                  
                  
                  1. Ja, so werde ich es wahrscheinlich machen müssen.
                    Ich habe mich halt gefragt, ob es eine Möglichkeit gegeben hätte die Werte auf diese Weise zu übergeben ohne, dass ich eine feste Anzahl vordefiniere:

                    Ja die gibt es, aber warum verwendest du nicht einfach das Array? Das ist einfacher und auch üblich.

                    Struppi.

                    1. Ja die gibt es, aber warum verwendest du nicht einfach das Array? Das ist einfacher und auch üblich.

                      Naja, ich verwende die Funktion setData an mehreren Stellen. Dort habe ich bereits die Prüfung mit arguments.length drin. Jetzt müßte ich speziell für diesen einen Fall eine Extra-Prüfung einbauen, der mir dann das Array auseinander nimmt. Wollte diese Funktion eigentlich sehr allgemeingültig halten und nicht für verschiedene Fälle eine Sonderprogrammierung einbauen.

                      1. Naja, ich verwende die Funktion setData an mehreren Stellen. Dort habe ich bereits die Prüfung mit arguments.length drin. Jetzt müßte ich speziell für diesen einen Fall eine Extra-Prüfung einbauen, der mir dann das Array auseinander nimmt. Wollte diese Funktion eigentlich sehr allgemeingültig halten und nicht für verschiedene Fälle eine Sonderprogrammierung einbauen.

                        Das verstehe ich nicht, du machst doch genau das gegenteil.

                        Allgemeingültig wäre so:

                        function setData(dasArray) { // die anderen Parameter hab ich mal weggelassen  
                        var wert_x = dasArray[0] || 'default';  
                        var wert_y = dasArray[1] || 'default';  
                        var wert_z = dasArray[2] || 'default';  
                        }
                        

                        oder wo liegt das Problem?

                        Struppi.

                        1. Das verstehe ich nicht, du machst doch genau das gegenteil.

                          Allgemeingültig wäre so:

                          function setData(dasArray) { // die anderen Parameter hab ich mal weggelassen

                          var wert_x = dasArray[0] || 'default';
                          var wert_y = dasArray[1] || 'default';
                          var wert_z = dasArray[2] || 'default';
                          }

                          
                          >   
                          > oder wo liegt das Problem?  
                            
                          An den anderen Stellen der Funktion setData() übergebe ich aber kein Array als Argumnent, sondern einfach einen String. Deswegen müßte ich jetzt speziell für diesen Fall eine Extra-Programmierung machen, wo das Array übergeben wird. 
                          
                          1. An den anderen Stellen der Funktion setData() übergebe ich aber kein Array als Argumnent, sondern einfach einen String. Deswegen müßte ich jetzt speziell für diesen Fall eine Extra-Programmierung machen, wo das Array übergeben wird.

                            Mir wird deine Fragestellung immer unklarer. Warum übergibst du dann hier keinen String?

                            Struppi.

                            1. Mir wird deine Fragestellung immer unklarer. Warum übergibst du dann hier keinen String?

                              Ganz einfach. Weil ich nicht weiß wie. :-)

                              1. Also ich mein das ernst.
                                Klar kann ich das in einen String wandeln, jedoch bekomme ich dann wiederum ja nicht die eizelnen Werte einzeln übergeben, sondern nur als EIN Argument.
                                Vielleicht ist die Lösung auch total simpel und ich seh sie einfach nicht. Darum bin ich hier. :-)

                                1. Klar kann ich das in einen String wandeln, jedoch bekomme ich dann wiederum ja nicht die eizelnen Werte einzeln übergeben, sondern nur als EIN Argument.
                                  Vielleicht ist die Lösung auch total simpel und ich seh sie einfach nicht. Darum bin ich hier. :-)

                                  Ich verstehe nicht was du willst. Du willst ein array, aber übergibst an anderer Stelle einen String, du willst eine allgemeingültige Funktkion, aber dann doch wieder nicht.

                                  Ich hab dir ja schon Beispiel gezeigt, vielleicht wäre es mal an der Zeit, dass du eins zeigst. Also das was du in der Funktion setData machen willst.

                                  Struppi.

                          2. Hallo,

                            function setData(dasArray) { // die anderen Parameter hab ich mal weggelassen

                            var wert_x = dasArray[0] || 'default';
                            var wert_y = dasArray[1] || 'default';
                            var wert_z = dasArray[2] || 'default';
                            }

                              
                            
                            > An den anderen Stellen der Funktion setData() übergebe ich aber kein Array als Argumnent, sondern einfach einen String. Deswegen müßte ich jetzt speziell für diesen Fall eine Extra-Programmierung machen, wo das Array übergeben wird.  
                              
                            und wie sieht ein Beispielaufruf Deiner Funktion setData(meinString) \*derzeit\* aus - ohne die neu zu lernende Funktionalität?  
                              
                            Sprich: wie hast \*Du\* die Aufrufschnittstelle \*Deiner\* Funktion definiert.  
                              
                            Wie ermittelt setData(meinString) aus meinString die übergebenen Argumente?  
                            Daraus resultiert die Antwort, wie Dein Array in eine Zeichenkette umgewandelt (serialisiert) werden muss.  
                              
                              
                            Freundliche Grüße  
                              
                            Vinzenz
                            
                            1. und wie sieht ein Beispielaufruf Deiner Funktion setData(meinString) *derzeit* aus - ohne die neu zu lernende Funktionalität?

                              Sprich: wie hast *Du* die Aufrufschnittstelle *Deiner* Funktion definiert.

                              Wie ermittelt setData(meinString) aus meinString die übergebenen Argumente?
                              Daraus resultiert die Antwort, wie Dein Array in eine Zeichenkette umgewandelt (serialisiert) werden muss.

                              Ich hab echt das Gefühl, dass ich anscheinend zu blöd bin oder mich einfach schlecht ausdrücke.

                              Daher hier jetzt mal ganz einfach:

                              Wenn ich setData aufrufe aus einem anderen Skript:

                                
                              setData(para1,para2,para3,para4,'meinText')  
                                
                              function setData(para1,para2,para3,para4,text)  
                              {  
                               //mach was mit den parametern:  
                               ...  
                              }  
                              
                              

                              Das bedeutet, die werden 1 zu 1 übernommen. Wenn ich nun ein Array übergebe, kann m.E. die Funktion nicht von alleine Wissen, dass dort nun kein String übergeben wurde, sondern ein Array.
                              Daher müßte ich nun wohl Abfragen, wenn dies und das zutrifft, behandle den Parameter "text" folgendermaßen...
                              Das ist für mich eine Anpassung der Funktion, die ich speziell für diesen einen Fall machen muss. Daher war meine Frage, wie bekomme ich das hin, dass meine x Paramter an die Funktion so übergeben werden, dass ich meine Funktion setData() nicht anpassen muss. Falls das nicht möglich ist, hab ich keine Wahl. Aber ich würde gerne wissen, ob es dafür eine Lösung gibt.

                              Gruss
                              Dennis

                              1. Daher hier jetzt mal ganz einfach:

                                Wenn ich setData aufrufe aus einem anderen Skript:

                                setData(para1,para2,para3,para4,'meinText')

                                function setData(para1,para2,para3,para4,text)
                                {
                                //mach was mit den parametern:
                                ...
                                }

                                
                                >   
                                > Das bedeutet, die werden 1 zu 1 übernommen. Wenn ich nun ein Array übergebe, kann m.E. die Funktion nicht von alleine Wissen, dass dort nun kein String übergeben wurde, sondern ein Array.  
                                  
                                Doch kann die Funktion Wissen z.b. mit typeof  
                                  
                                
                                > Daher müßte ich nun wohl Abfragen, wenn dies und das zutrifft, behandle den Parameter "text" folgendermaßen...  
                                > Das ist für mich eine Anpassung der Funktion, die ich speziell für diesen einen Fall machen muss. Daher war meine Frage, wie bekomme ich das hin, dass meine x Paramter an die Funktion so übergeben werden, dass ich meine Funktion setData() nicht anpassen muss. Falls das nicht möglich ist, hab ich keine Wahl. Aber ich würde gerne wissen, ob es dafür eine Lösung gibt.  
                                  
                                Diese Aussage ist wieder so eine die man nicht versteht. Wenn du die Funktion nicht anpassen willst, dann musst du die Parameter genauso übergeben. Ich verstehe hier auch nicht den zusammenhang mit deinem Beispiel den du uns weiter oben gezeigt hast, was sind denn deine "x-Parameter"? und was ist das Problem?  
                                  
                                Struppi.
                                
                                1. Hallo,

                                  Diese Aussage ist wieder so eine die man nicht versteht. Wenn du die Funktion nicht anpassen willst, dann musst du die Parameter genauso übergeben. Ich verstehe hier auch nicht den zusammenhang mit deinem Beispiel den du uns weiter oben gezeigt hast, was sind denn deine "x-Parameter"? und was ist das Problem?

                                  Also ich verstehe es so: Die Funktion erwartet alle Parameter einzeln und holt sie aus dem arguments-Array ab. Zitat:

                                  Naja, ich verwende die Funktion setData an mehreren Stellen. Dort habe ich bereits die Prüfung mit arguments.length drin.

                                  Da jetzt aber noch einige Werte aus einem Array mit variabler Länge dazukommen, sind auch diese als einzelne Parameter zu übergeben, damit die Funktion selber nicht verändert werden muss (zusätzliche typeof-Abfrage mit ggf. spezieller Array-Behandlung), sondern wie gehabt alles einzeln aus dem arguments-Array holen kann.

                                  Das Konzept ist m.E. für den Müll. Bei mehr als zwei, drei Parametern verwendet man praktischerweise ein Array oder ein Objekt, um sie zu übergeben.

                                  Gruß, Don P

                                  1. Also ich verstehe es so: Die Funktion erwartet alle Parameter einzeln und holt sie aus dem arguments-Array ab. Zitat:

                                    Naja, ich verwende die Funktion setData an mehreren Stellen. Dort habe ich bereits die Prüfung mit arguments.length drin.

                                    Da jetzt aber noch einige Werte aus einem Array mit variabler Länge dazukommen, sind auch diese als einzelne Parameter zu übergeben, damit die Funktion selber nicht verändert werden muss (zusätzliche typeof-Abfrage mit ggf. spezieller Array-Behandlung), sondern wie gehabt alles einzeln aus dem arguments-Array holen kann.

                                    Vielleicht bin ich auch zu blöd, ich versteh immer noch nicht wo genau das Problem liegt. Es gibt ja z.b. auch die Möglichkeit einen Parameter zu überspringen oder eben zu mit typeof zu prüfen, was aber nicht geht, weil er die Funktion nicht ändern kann/will. Dann versteh ich aber nicht warum er ein Array als Parameter übergeben will, bzw. was die Funktion mit dem Parameter machen soll.

                                    Das Konzept ist m.E. für den Müll. Bei mehr als zwei, drei Parametern verwendet man praktischerweise ein Array oder ein Objekt, um sie zu übergeben.

                                    Das ist vermutlich richtig, wenn man aber wüßte was genau das Problem ist, gäbe es sicher auch andere Möglichkeiten.

                                    Struppi.

                                    1. Ok, also nochmal alles ganz ausführlich.
                                      Ich habe eine HTML Seite in der verschiedene Texteingabefelder enthalten sind. Die Anzahl der Texteingabefelder ist immer Variabel. Das heißt mal gibt es 2 Felder, mal 15 und mal 6 beispielsweise.

                                        
                                      ...  
                                      <input type="text" id="text1" name"text1" value="" />  
                                      <input type="text" id="text2" name"text2" value="" />  
                                      ...  
                                      
                                      

                                      Dann gibt es einen Button, der die Funktion "doSomething()" aufruft.

                                        
                                      <input type="button" name="send" value=" Send " onclick="doSomething();" />  
                                      
                                      

                                      Diese Funktion soll nun prüfen, wieviele Eingabefelder es gibt und diese Werte auslesen. Diese Werte sollen nun in der Funktion "doSomething()" an die Funktion "setData()" weitergegeben werden.
                                      Die Funktion "setData()" erwartet eine gewisse Anzahl an Parametern. Es ist aber auch möglich, mehr Parameter zu übergeben, da in der Funktion "setData()" die Anzahl der übergebenen Parameter per arguments.length abgefragt wird und dementsprechend weiterverarbeitet.

                                      Nun ist meine Frage ganz einfach. Wie muss ich die Funktion "doSomething()" verändern, dass mir alle Texteingaben als einzelne Parameter an die Funktion "setData()" übergeben werden.

                                        
                                      function doSomething()  
                                      {  
                                       var noOfEntries = document.getElementById('list').childNodes.length;  
                                       var tempArray = new Array();  
                                       for(var a=0;a < noOfEntries ;a++)  
                                       {  
                                        tempArray = tempArray.concat(document.getElementById('list').childNodes[a].firstChild.nodeValue);  
                                       }  
                                        
                                      /* Übergabe an die Funktion: So funktioniert es, nur dass ich nicht weiß, wie ich es vermeide tempArray[0], tempArray[1]... zu schreiben, da die Anzahl der Werte ja unbekannt ist. */  
                                        
                                      setData(para1,para2,para3,para4,tempArray[0],tempArray[1],tempArray[2],tempArray[3]);  
                                      }  
                                      
                                      

                                      Mir war bislang nicht bekannt, dass man eleganter die Werte über ein Array übergibt. Daher habe ich die Funktion "setData()" so geschrieben, dass die Anzahl an Parametern abgefragt wird und nicht wie von Don P. beschrieben per Array und das dann auseinander genommen wird.

                                      Ich hoffe nun war es verständlich. Bitte nicht falsch verstehen, ich bin dankbar für jeden Hinweis oder Verbesserungen.

                                      Viele Grüße

                                      Dennis

                                      1. Hallo d3nn1s,

                                        die Möglichkeiten wurden dir ja schon genannt: Array, serialisiertes Array und variable Anzahl von Parametern. Welche du einsetzten kannst, hängt von der Funktion setData ab und auch davon, ob du diese ändern kannst und darfst.

                                        Wenn du setData nicht ändern kannst und mit einer variablen Anzahl von Parametern leben musst, fällt mir nur noch ein, den Funktionsaufruf in einer Schleife als String zu erzeugen und dann an eval zu übergeben. Aber alleine beim Schreiben dieser Zeile läuft es mir schon kalt über den Rücken.

                                        Wenn du setData verändern darfst, prüfe ob ein Parameter ein Array ist und behandle ihn entsprechend.

                                        Gruß, Jürgen

                                      2. Nun ist meine Frage ganz einfach. Wie muss ich die Funktion "doSomething()" verändern, dass mir alle Texteingaben als einzelne Parameter an die Funktion "setData()" übergeben werden.

                                        z.b. so:

                                        <!doctype html>  
                                        <html lang="en">  
                                        <head>  
                                            <title></title>  
                                        </head>  
                                        <body>  
                                        <div id="list">  
                                        <input type="text" id="text1" name"text1" value="">  
                                        <input type="text" id="text2" name"text2" value="">  
                                        </div>  
                                        <input type="button" name="send" value=" Send " onclick="doSomething();">  
                                          
                                          
                                          
                                        <script type="text/javascript">  
                                        function doSomething() {  
                                            var noOfEntries = document.getElementById('list').getElementsByTagName('input');  
                                            var tempArray = [];  
                                            for(var i = 0; i < noOfEntries.length; i++){  
                                                tempArray.push(noOfEntries[i].value);  
                                            }  
                                            setData.apply(this, [1, 2, 3, 4].concat(tempArray));  
                                          
                                        }  
                                        function setData(){  
                                            var arg = Array.prototype.slice.call(arguments)  
                                            // hier könntest du wahlweise auch direkt auf arguments[index] zugreifen  
                                            var p1 = arg.shift();  
                                            var p2 = arg.shift();  
                                            var p3 = arg.shift();  
                                            var p4 = arg.shift();  
                                            var rest = arg;  
                                            alert(rest.join('\n'))  
                                        }  
                                        </script>  
                                        </body>  
                                        </html>  
                                        
                                        

                                        Struppi.

                                        1. Hallo Struppi,

                                          setData.apply(this, [1, 2, 3, 4].concat(tempArray));

                                          das sehe ich jetzt zu ersten Mal. Könntest du bitte erklären (oder einen Link setzen), was "[1, 2, 3, 4]" in diesem Zusammenhang bedeutet, und ob die Lösung auch mit beliebiger Anzahl von Eingabefeldern funktioniert?

                                          Gruß, Jürgen

                                          1. setData.apply(this, [1, 2, 3, 4].concat(tempArray));

                                            das sehe ich jetzt zu ersten Mal. Könntest du bitte erklären (oder einen Link setzen), was "[1, 2, 3, 4]" in diesem Zusammenhang bedeutet, und ob die Lösung auch mit beliebiger Anzahl von Eingabefeldern funktioniert?

                                            Ach so stimmt - die 1,2,3,4 sind Platzhalter für die Parameter p1 - p4 damit der Test funktioniert.

                                            Ja die Lösung mit apply funktioniert mit beliebig vielen Parametern. Es wird quasi das Array als einzelne Parameter an die Funktion übergeben.

                                            Struppi.

                                            1. Hallo Struppi,

                                              Danke.

                                              Gruß, Jürgen

                                        2. Ok, vielen Dank für Eure Hilfe.
                                          Ich habs nun doch so gelöst, dass ich die Funktion setData() geändert und dort eine Prüfung der Variable mit typeof eingebaut habe. Das erschien mir am sinnvollsten und wer weiß wann ich nochmal praktischerweise ein Array übergeben muss / kann / will.
                                          Weiterhin habe ich die das Hinzufügen zum Array nun mit .push geändert und das Auslesen mit getElementsByTagName. Danke nochmal. Ich hoffe, ich habe euch nicht zu sehr genervt. :-)

                                          Gruss
                                          Dennis

                                          1. Hallo,

                                            Ich habs nun doch so gelöst, dass ich die Funktion setData() geändert und dort eine Prüfung der Variable mit typeof eingebaut habe. Das erschien mir am sinnvollsten und wer weiß wann ich nochmal praktischerweise ein Array übergeben muss / kann / will.

                                            Dann musst du aber aufpassen, dass du nicht mal ein anderes Objekt als ein Array übergibst, denn typeof kann Arrays nicht von anderen Objekten unterscheiden und auch nicht von null.

                                            @Struppi:
                                            Siehste, man stolpert immer mal wieder über die Unfähigkeit von typeof :P

                                            Gruß, Don P

              2. Ok, das kann ich ändern. Dessen war ich mir nicht bewußt. Ich wollte immer den aktuell ausgelesenen Wert einfach dem Array hinzufügen.

                Wie gesagt, dafür existiert [Array].push()

                Du hast hier zwei Möglichkeiten
                a. tempArray direkt übergeben
                b. Mit arguments arbeiten.

                Lösung a) funktioniert leider nicht. Die Funktion behandelt die Übergabe als ein Wert und nicht als getrennte Werte.

                Ja als Array. Ich verstehe aber die Antwort nicht, dein Problem ist, dass du eine variabel Anzahl an Parametern hast. Also musst du diese auch irgendwie in der Funktion entgegennehmen, dann ist das Array doch das flexibelste.

                b) musst du mir näher erläutern, wie das praktisch aussehen soll.

                Im Prinzip genauso wie die Übergabe eines Arrays. Du müßtest mal erläutern, wie du die Werte entgegen nimmst.

                Struppi.

  2. Hallo d3nn1s,

    schon mal hier http://de.selfhtml.org/javascript/objekte/function.htm#arguments reingeschaut?

    Gruß, Jürgen

    1. Hallo Jürgen,

      ja dies ist mir bekannt und verwende ich auch in der Funktion, die aufgerufen wird. Allerdings ist dies nicht mein Problem.

      Das Problem ist das Schreiben, der ausgelesenen Werte als einzelne Paramter in die Funktion. Oder habe ich jetzt etwas übersehen?

      Viele Grüße
      Dennis

      1. Hallo d3nn1s,

        Das Problem ist das Schreiben, der ausgelesenen Werte als einzelne Paramter in die Funktion. Oder habe ich jetzt etwas übersehen?

        müssen es denn einzelne Parameter sein oder ginge auch ein Array?

        Gruß, Jürgen

        1. Ich habe es bereits mit der Übergabe als Array versucht, was mir auch nicht half. Deshalb wäre es für am Besten einzelne Parameter am Ende herauszubekommen.

          Gruss
          Dennis

          1. Ich habe es bereits mit der Übergabe als Array versucht, was mir auch nicht half. Deshalb wäre es für am Besten einzelne Parameter am Ende herauszubekommen.

            Dann mach das.

            Oder verrat uns doch endlich, wie man dir helfen könnte.

            Struppi.

  3. Hi there,

    Ich möchte eine variable Anzahl an Daten aus Texteingabefeldern auslesen (was auch soweit problemlos funktioniert). Diese Daten möchte ich an eine Funktion übergeben. Und dort ist mein Problem.

    Häng' die einzelnen Werte einfach zu einem gesamten Parameter zusammen, wobei Du "zwischen" die Einfügungen irgendwelche Sonderzeichen 'reinschreibst, die im Text oder was immer Du für Werte hast, nicht vorkommen sollten. Dann kannst Du die einzelnen Parameter IN der Funktion wieder auseinanderklauben; was sie immer Du dann auch damit vorhast...

  4. hi,

    Ich habe bereits Versuche mit der Umklammerung von Hochkommata unternommen, was aber das Ergebnis nicht wie gewünscht verändert.

    Hat jemand einen Ansatz dieses Problem zu lösen oder ist es einfach nicht möglich?

    Serialisiere den Input aus dem Formular, das sieht dann z.B. so aus:

    name=We%C3%9Fm%C3%B6ller&vname=%C3%84nne&ort=N%C3%BCrnberg&senden=Daten%20senden

    Mit split und decodeURIComponent machst Du daraus ein Objekt, das sieht dann so aus:

    obj.name = "Weßmöller";
     obj.vname = "Änne";
     obj.ort = "Nürnberg";
    usw.

    Dieses Objekt übergibst Du Deiner Funktion. Das ist dann immer ein einziger Parameter.

    Hotti