romero: nochmals return!

return

Die folgende Nachricht zum Thema stammt von: EKKi, 08. 02. 2010, 10:53

Mahlzeit romero,

das ist ja mal wieder eine prima Gelegenheit, JS-Parser zu spielen ...

Angenommen, diese Funktion

function Folientyp()

würde irgendwie und irgendwo aufgerufen, dann würde sie ja letztendlich entweder

var STL_Folie = "";

oder

var STL_Folie = "halloballo";

oder

var STL_Folie = " / F";

oder NIX zurückgeben, je nachdem, wie die Vergleiche, ob irgendwas, das falsch oder wahr ist, falsch oder wahr ist, ausgehen:

return STL_Folie;

function Übernehmen(STL_Folie)
[...]
die function übernehmen rufe ich mit onclick="übernehmen()" auf.

Du solltest sie lieber mit onclick="Übernehmen()" aufrufen - Javascript unterscheidet nämlich sehr pingelig zwischen Klein- und Großschreibung.

Abgesehen davon: *wo genau* wird die Funktion aufgerufen? In dem von Dir genannten Beispielcode jedenfalls nirgendwo.

Kommen wir nun wieder zur ersteren Funktion zurück:

<td width=255px colspan=1>
<input type="radio" name="STL_Folie" value="Folie_ohne" onClick="Folientyp()">ohne separaten Folien-Stückliste</input></td>

Abgesehen davon, dass Du die Namen von Attributen (in diesem Fall also "onclick") sinnvollerweise durchgängig in Kleinbuchstaben notieren solltest, ist es erstaunlich, was denn hier eigentlich mit dem Rückgabewert der Funktion "Folientyp()" passiert: nämlich *NICHTS*.

wie kriege ich nun dem script dazu,dass er den wert der STL_Folie ausgibt?er gibt immer nur undefined.

Wie wo ausgeben? Das sagst Du ihm doch nirgendwo ...

wo liegt nun der fehler?

Ich schätze mal, der Fehler liegt in Deinem Konzept. Das solltest Du vielleicht (nochmal) überdenken und uns dann vielleicht nochmal fachlich erläutern - damit Deine Leser wissen, was Du *vorhast*. Dein Code jedenfalls wirkt chaotisch und tut offenbar nicht das, was Du willst dass er tut. Um zu verstehen, was Du *eigentlich willst*, ist er also nur in sehr beschräenktem Maße hilfreich.

er soll wie gesagt diesen wert stl_folie in die function übernehmen.ist sozusagen eine ausgabe-variable...

Das sagt zumindest mir jetzt *gar nichts*. Beschreibe bitte genauer, was Du bezwecken willst.

MfG,
EKKi

also die funcion="Übernehmen()" wird durch einen ok-button aufgerufen.also sobald man da draufdrückt,wird diese funktion gestartet.

die function Folientyp() wird aufgerufen,sobald man eines der 3 radiobutton anklickt.sprich,wenn man eines anklickt,sie sozusagen markiert,dann soll er mittels den if-else's-abfragen einen wert für var STL_Folie definieren.

dieser wert soll dann in der function Übernehmen( STL_Folie ) ausgegeben werden,mittels:

var output = STL_Folie;
var ausgabe = document.getelemenbyid( 'ausgabe' ).innerhtml = output;

hoffe nun ist es besser.
wenn nicht gebe ich mal den kompletten script rüber oder das was benötigt wird.

lg romero

  1. Hallo,

    ich erkenne wenig sturktur in deiner problembeschreibung. probleme isolieren und dann möglichst exemplarisch knapp darstellen ist wichtig.

    var output = STL_Folie;
    var ausgabe = document.getelemenbyid( 'ausgabe' ).innerhtml = output;

    warum die variable umkopieren?
    getelemenbyid - gibtsnich.

    Gruß

    jobo

    1. Hallo,

      ich erkenne wenig sturktur in deiner problembeschreibung. probleme isolieren und dann möglichst exemplarisch knapp darstellen ist wichtig.

      var output = STL_Folie;
      var ausgabe = document.getelemenbyid( 'ausgabe' ).innerhtml = output;

      warum die variable umkopieren?
      getelemenbyid - gibtsnich.

      Gruß

      jobo

      war auch an ekki geschrieben.hab sozusagen das aus dem archiv nicht mehr komplett rüberkopiert.konnte aus dem archiv nicht mehr antwortet,deshalb musste ich einen neuen thread aufmachen.

      warum umkopieren?macht man das nicht so?

      ja ich weiß,es heißt getelementbyid

      1. Hallo,

        ein link reicht. und es heißt getElementById().

        wenn du fehlerhaften code postest, den aber nicht "so meinst", dann kann man nicht sagen, woran es liegt. nicht selten liegt es nämlich auch an falscher syntax.

        Gruß

        jobo

        1. Hallo,

          ein link reicht. und es heißt getElementById().

          wenn du fehlerhaften code postest, den aber nicht "so meinst", dann kann man nicht sagen, woran es liegt. nicht selten liegt es nämlich auch an falscher syntax.

          Gruß

          jobo

          dann frag ich mal anders.

          wie kann ich einen wert,welchen ich durch "was-wäre-wenn"-abfrage,abfrage bzw setze,aus einer funktion in eine andere übernehmen.
          der wert wird in der 1. funktion gesetzt und soll in der 2. funktion mit ausgegeben werden. der wert soll z.b. so heißen:
          var wert = "hallo welt" oder var wert = " guten tag" oder var wert = "servus"
          die 1. funktion rufe ich mittels einem button auf.

          brauch da einfach mal eine ganz normale definition,wie man return richtig einsetzt bzw es richtig ausgeführt wird.

          lg romero

          1. Hallo,

            brauch da einfach mal eine ganz normale definition,wie man return richtig einsetzt bzw es richtig ausgeführt wird.

            glaub ich nicht. wenn eine variable nicht mit "var " deklariert wird, ist sie global.

              
            <script>  
            [code lang=js]  
            function definiereVar() {  
               myTestVar = "hallo";  
            }  
            function alertVar() {  
               alert(myTestVar);  
            }  
            function returnTest() {  
              return "wasanderes";  
            }  
            function changeMyTestVar() {  
               myTestVar = returnTest();  
            }  
            
            

            </script>
            <button onclick="definiereVar()">definiereVar()</button>
            <button onclick="alertVar()">alertVar()</button>
            <button onclick="changeMyTestVar()">changeMyTestVar()</button>
            [/code]

            Gruß

            jobo

            1. Hallo,

              brauch da einfach mal eine ganz normale definition,wie man return richtig einsetzt bzw es richtig ausgeführt wird.

              glaub ich nicht. wenn eine variable nicht mit "var " deklariert wird, ist sie global.

              <script>
              [code lang=js]
              function definiereVar() {
                 myTestVar = "hallo";
              }
              function alertVar() {
                 alert(myTestVar);
              }
              function returnTest() {
                return "wasanderes";
              }
              function changeMyTestVar() {
                 myTestVar = returnTest();
              }

              
              > </script>  
              > <button onclick="definiereVar()">definiereVar()</button>  
              > <button onclick="alertVar()">alertVar()</button>  
              > <button onclick="changeMyTestVar()">changeMyTestVar()</button>  
              > [/code]  
              >   
              > Gruß  
              >   
              > jobo  
                
              achso das wusst ich nicht.vielen dank.  
                
              und diese variablen,welche ich in einer funktion ohne var deklariere,sind automatisch für alle funktionen gültig?also da brauch ich kein return myTestVar schreiben,sondern kann sofort,wenn ich was ausgeben will diese variable nehmen?  
                
              also z.b.:  
              function hallo()  
              {...  
              flugzeugtyp = document.auswahl.flt.options[document.auswahl.flt.selectedindex].text;  
              ...}  
                
              function duda()  
              {...  
              var folie = document.getelementbyid( "folie" ).innerhtml = flugzeugtyp;  
              ...}  
                
              ist das soweit korrekt?oder hab ich da was übersehen?  
              ausgeben würde er,soweit ich es nun verstanden habe,die "globale" variable flugzeugtyp oder?  
              habe kleinschreibweise benutzt,war zu faul,sorry.hoffe wisst was gemeint ist.  
                
              lg romero
              
            2. hatte da einen fehler drin gehabt.nun die korrekte version.sorry dafür

              Hallo,

              brauch da einfach mal eine ganz normale definition,wie man return richtig einsetzt bzw es richtig ausgeführt wird.

              glaub ich nicht. wenn eine variable nicht mit "var " deklariert wird, ist sie global.

              <script>
              [code lang=js]
              function definiereVar() {
                 myTestVar = "hallo";
              }
              function alertVar() {
                 alert(myTestVar);
              }
              function returnTest() {
                return "wasanderes";
              }
              function changeMyTestVar() {
                 myTestVar = returnTest();
              }

              
              > </script>  
              > <button onclick="definiereVar()">definiereVar()</button>  
              > <button onclick="alertVar()">alertVar()</button>  
              > <button onclick="changeMyTestVar()">changeMyTestVar()</button>  
              > [/code]  
              >   
              > Gruß  
              >   
              > jobo  
                
              achso das wusst ich nicht.vielen dank.  
                
              und diese variablen,welche ich in einer funktion ohne var deklariere,sind automatisch für alle funktionen gültig?also da brauch ich kein return myTestVar schreiben,sondern kann sofort,wenn ich was ausgeben will diese variable nehmen?  
                
              also z.b.:  
              function hallo()  
              {...  
              flugzeugtyp = document.auswahl.flt.options[document.auswahl.flt.selectedindex].text;  
              ...}  
                
              function duda(flugzeugtyp)  
              {...  
              var folie = document.getelementbyid( "folie" ).innerhtml = hallo(flugzeugtyp);  
              ...}  
                
              ist das soweit korrekt?oder hab ich da was übersehen?  
              ausgeben würde er,soweit ich es nun verstanden habe,die "globale" variable flugzeugtyp oder?  
              habe kleinschreibweise benutzt,war zu faul,sorry.hoffe wisst was gemeint ist.  
                
              lg romero
              
              1. und diese variablen,welche ich in einer funktion ohne var deklariere,sind automatisch für alle funktionen gültig?also da brauch ich kein return myTestVar schreiben,sondern kann sofort,wenn ich was ausgeben will diese variable nehmen?

                Ja, aber jeder der sauber programmieren möchte wird sowas vermeiden, denn je mehr globale Variabeln du hast, umso mehr Fehler kannst du machen. Auch wenn du z.b. Skripte von anderen einbindest könntes es dann passieren, wenn jeder mit globalen Variabeln arbeiten würde, dass dieses auch die Variabel myTestVar verwendet und mit Werten überschreibt. Und dann? Alles umschreiben.

                globale Variabeln also wo immer möglich vermeiden!

                Struppi.

              2. Hallo,

                brauch da einfach mal eine ganz normale definition,wie man return richtig einsetzt bzw es richtig ausgeführt wird.

                return dient dazu, einen Wert zurückzugeben von einer Funktion. Beispiel:

                var jetzt = function() { return new Date() };  
                alert( jetzt() ); //
                ~~~ gibt den Wert von `new Date()`{:.language-javascript}, d.h. Datum/Uhrzeit in einer alert-Box aus  
                  
                (Das Beispiel ist natürlich konstuiert: Wenn man die Variable "jetzt" nicht weiterverwenden will, ist die ganze Funktion unnötig und man würde lieber dierkt `alert( new Date() );`{:.language-javascript} notieren, um Datum und Uhrzeit zu erfahren)  
                  
                Der Wert, den `return`{:.language-javascript} hier also zurückgibt, ist ein Date-Objekt.  
                  
                Es kann auch ein beliebiger anderer Wert sein, z.B. gibt `return 'blaBla'; `{:.language-javascript} die Zeichenkette `"blabla"`{:.language-javascript} zurück, oder `return ['etwas', 'nochwas'];`{:.language-javascript} gibt ein Array mit zwei Werten zurück, nämlich die beiden Zeichenketten `"etwas"`{:.language-javascript} und `"nochwas"`{:.language-javascript}.  
                  
                Das ist alles.  
                  
                Gruß, Don P  
                
                
                1. Hallo,

                  Das ist alles.

                  Doch nicht ganz:
                  return dient auch dazu, überhaupt zurückzukehren von einer Funktion, also auch, wenn man keinen Wert zurückgibt.

                  Gruß, Don P

                  1. Hallo,

                    Das ist alles.

                    Doch nicht ganz:
                    return dient auch dazu, überhaupt zurückzukehren von einer Funktion, also auch, wenn man keinen Wert zurückgibt.

                    Gruß, Don P

                    und wie kann ich mehrere werte zurückgeben?
                    also wenn es so ausschaut:

                    function hallo()  
                    {...  
                    var flugzeug = document.auswahl.flugzeug.options[document.auswahl.flugzeug.selectedindex].text;  
                    var bereich = document.auswahl.bereich.options[document.auswahl.bereich.selectedindex].text;  
                    ...  
                      
                    return [ flugzeug , bereich ];  
                    ...}
                    

                    wenn ich aber nun in einer 2. function diese beiden werte separat haben möchte,also in entwa so:

                    function duda( flugzeug , bereich )  
                    {...  
                    if( irgewas == irgendwas )  
                    {  
                    document.getelementbyid( "ausgabe" ).innerhtml = duda( flugzeug );  
                    } else {  
                    document.getelementbyid( "ausgabe" ).innerhtml = duda( bereich );  
                    }  
                    ...}
                    

                    dann bringt er mir beide sachen zusammen,also flugzeug und bereich,egal welchen wert ich da oben bei duda() einsetze.
                    ich brauch da aber einmal nur das flugzeug und zum anderem den bereich.

                    wie müsste ich das denn schreiben?brauche also die werte nicht zusammen sondern getrennt von einander.

                    vielen dank schonmal im vorraus.

                    lg romero

                    1. dann bringt er mir beide sachen zusammen,also flugzeug und bereich,egal welchen wert ich da oben bei duda() einsetze.
                      ich brauch da aber einmal nur das flugzeug und zum anderem den bereich.

                      wie müsste ich das denn schreiben?brauche also die werte nicht zusammen sondern getrennt von einander.

                      Du musst die Funktion so aufrufen, dass du den Rückgabewert auch verwenden kannst. In deinem "Beispiel" wird das Array in eine Zeichenkette umgewandelt (und innerHTML zugewiesen).

                      var ret = duda( flugzeug, breich );  
                      if( irgewas == irgendwas ) {  
                      document.getElementById( "ausgabe" ).innerhtml = ret[0];  
                      } else {  
                      document.getElementById( "ausgabe" ).innerhtml =  ret[1];  
                      }
                      

                      Und Bitte, bevor du Code postet probier ihn aus und schau in die Fehlerkonsole, auch wenn es nur ein Beispiel ist. Danke.

                      Struppi.

                    2. Hallo,

                      also wenn es so ausschaut:

                      function hallo()
                         {

                      var flugzeug = document.auswahl.flugzeug.options[document.auswahl.flugzeug.selectedindex].text;
                      var bereich = document.auswahl.bereich.options[document.auswahl.bereich.selectedindex].text;

                      return [ flugzeug , bereich ];

                      }

                        
                      Dann gibt die Funktion das Array `[flugzeug, bereich]`{:.language-javascript} zurück, ok.  
                        
                      
                      > wenn ich aber nun in einer 2. function diese beiden werte separat haben möchte [...]  
                        
                      Dann übergibst du sie ihr eben separat, z.B. so:  
                        
                      ~~~javascript
                      var flugzeugBereich = hallo();                 // das Array mit den beiden Werten  
                      duda( flugzeugBereich[0], flugzeugBereich[1]); // Funktionsaufruf mit separaten Parametern
                      

                      Statt eines Arrays kannst du auch ein Objekt zurückgeben, z.B. in hallo()*

                      return { flugzeug:flugzeug , bereich:bereich }; // Objekt mit Eigenschaften namens "flugzeug" und "bereich"

                      Und den Funktionsaufruf dann so norieren:

                      duda( flugzeugBereich.flugzeug, flugzeugBereich.bereich );

                      ---
                      Struppi hat's dir schon gesagt: Validiere deinen Code! Eine Funktion "document.getelementbyid" existiert z.B. nicht. Beim Programmieren muss man exakt sein. Pfusch wird immer mit Ärger und Verdruß bestraft.

                      * Nimm ausagekräftige Bezeichner für deine Variablen. "hallo" und "duda" sagen nichts darüber aus, was die Funktionen tun. Stell dir 1000 Zeilen Code vor mit Bezeichnern wie "duda", "bla", "dingsda1"... wer soll den verstehen?

                      Gruß, Don P

                      1. hallöchen.

                        ok dann versuch ich es mal kurz zusammenzubauen.

                        die 1. funktion ist die funtion Übernehmen.dabei wird das was ich vorher in der auswahlliste ausgewählt bzw. eingegeben habe,ausgegeben.

                        also in etwa so:

                        function Übernehmen()  
                           {  
                        var flugzeug = document.auswahl.flugzeug.options[document.auswahl.flugzeug.SelectedIndex].text;  
                        var bereich = document.auswahl.bereich.options[document.auswahl.bereich.selectedindex].text;  
                        ...  
                          
                        document.getElementById( "Prüfung" ).innerHTML = 'Flugzeugtyp: ' + flugzeug + ' / Bereich: ' + bereich;  
                        ...  
                          
                        if( flugzeug == "A321")  
                        {  
                        document.getElementById( "Meldung").innerHTML = '<input type="button" value="Bestätigen" onclick="Folie_Bestätigen()</input> <input type="button" value="Bestätigen" onclick="Folie_Abbrechen()</input>';  
                        } else {  
                        document.getElementById( "Meldung").innerHTML = '';  
                        }  
                        return [ flugzeug , bereich ];  
                        }
                        

                        wenn ich nun auf abbrechen gehen will,dann soll folgende function aufgerufen werden:

                        function Folie_Abbrechen( flugzeug , bereich )  
                        {...  
                        var ausgabe_abbrechen = Übernehmen();  
                        if( ausgabe_abbrechen[0] == "A321" )  
                        {  
                        document.getElementById( "Prüfung" ).innerHTML = ausgabe_abbrechen[0] + ' und ' + ausgabe_abbrechen[1] + ' passen gut zusammen';  
                        } else {  
                        document.getElementById( "Prüfung" ).innerHTML = ausgabe_abbrechen[1] + ' ist hier fehl am Platz';  
                        }  
                        ...}
                        

                        ist das soweit korrekt?

                        lg romero

                        1. Mahlzeit romero,

                          ist das soweit korrekt?

                          Es sieht zumindest so aus, als ob es funktionieren könnte - Näheres dazu schreibt Dir gerne die Fehlerkonsole Deines Browsers, wenn Du den Code ausprobierst.

                          MfG,
                          EKKi

                          --
                          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                          1. Mahlzeit romero,

                            ist das soweit korrekt?

                            Es sieht zumindest so aus, als ob es funktionieren könnte - Näheres dazu schreibt Dir gerne die Fehlerkonsole Deines Browsers, wenn Du den Code ausprobierst.

                            MfG,
                            EKKi

                            hat keine fehler gebracht.also hats funktioniert.vielen dank dafür an alle.

                            lg romero