Der Martin: Button in einer function erstellen und danach ausführen

Beitrag lesen

Hallo,

ich möchte nicht, dass das jetzt als Vorwurf oder gar als Arroganz rüberkommt, aber ich habe den Eindruck, dass dir noch wesentliche Grundlagen zum Verständnis nicht nur speziell von Javascript, sondern allgemein der Programmierkunst fehlen. Beispielsweise das Konzept von Funktionen und lokalen bzw. globalen Variablen. Ich ziehe den Schluss mal vor:

wie kriege ich mehrere variablen mittels return in eine andere funktion?

Die bekommst Variablen (genauer gesagt: Werte) mit return nicht "in eine andere Funktion", sondern zunächst mal nur aus der Funktion heraus, in der sie entstehen.

weiß wie man eine bekommt,aber nicht wie man mehr als eine weiter verwendet.

Die Variable, die du mit return zurückgibst, kann selbst ein Array oder ein Objekt sein. Ein triviales Beispiel: Wir schreiben eine Funktion, die zwei komplexe Zahlen (bestehend aus Real- und Imaginärteil) addieren und das Ergebnis zurückliefern soll.

Methode 1: Komplexe Zahlen als Arrays mit 2 Elementen

function KomplexSumme(a, b)
 { var Summe = [];              // alternative Schreibweise für new Array()

Summe[0] = a[0] + b[0];      // Realteil
   Summe[1] = a[1] + b[1];      // Imaginärteil

return Summe;
 }

Methode 2: Komplexe Zahlen als Objekte mit den Eigenschaften Re und Im

function KomplexSumme(a, b)
 { var Summe = {};              // alternative Schreibweise für new Object()

Summe.Re = a.Re + b.Re;      // Realteil
   Summe.Im = a.Im + b.Im;      // Imaginärteil

return Summe;
 }

Das sollte dir mögliche Wege aufzeigen, wie eine Funktion mehrere Werte zurückgeben kann. Wirklich sinnvoll ist das jedoch nur, wenn diese Werte miteinander ein sinnvolles Ganzes ergeben.

function hallo()
{...
return wert_1;
...}

function duda()
{...
var ausgabe = hallo( wert_1 );
...}

Dieser Ausschnitt ist widersprüchlich: Du rufst deine Funktion hallo() auf und übergibst ihr einen Parameter, obwohl die Funktion ohne Parameter deklariert ist. Außerdem existiert wert_1 offensichtlich innerhalb von hallo(), nicht aber in duda(). Jedenfalls nicht offensichtlich.

function hallo()

{...
var output = '<center class="Folie"><img src=C:/test/Achtung.png width=30px height=25px> <b>ACHTUNG:</b><br>Wollen Sie wirklich separate Folien-Stückliste(n) anlegen?<br><br><input type="button" name="Bestätigung" value="Bestätigen" onClick="Folie()"></input> <input type="button" name="Bestätigung" value="Abbrechen" onClick="Folie()"></input></center>';

  

> > du erstellst einen String, der HTML enthält (übrigens zum Teil ungültiges HTML),  
> wo enthält es ungültiges HTML?  
  
Der HTML-String enthält ein img-Element, in dem der Wert des src-Attributs nicht in Anführungszeichen steht (obwohl er muss); außerdem enthält er für die Attribute width und height die ungültigen Werte 30px bzw. 25px. Merke: Die HTML-Attribute width oder height geben immer Pixel an (oder Prozent), die Einheit px ist hier ein Fehler.  
  

> > > `var Folie_Meldung = document.getElementById( "Folie_Meldung" ).innerHTML = output;`{:.language-javascript}  
  

> > speicherst ihn als erstes in output. Als nächstes kopierst du ihn als HTML-Inhalt in ein Element mit der ID "Folie\_Meldung", und gleichzeitig noch in die Variable Folie\_Meldung.  
> was ist denn daran falsch?  
  
Es ist nicht falsch, nur sehr umständlich. Dein Code in Kurzform:  
  
  var x = "foo";  
  var y = getElementById().innerHTML = x;  
  
Dieser Code erzeugt zwei lokale Variablen, die beide denselben Wert bekommen (also ist mindestens eine überflüssig), und die zumindest in dem Ausschnitt, den du hier gezeigt hast, beide nicht verwendet werden.  
  

> ich habe das schon umgeschrieben  
> var folie\_meldung = `document.getElementById( "folie_meldung" ).innerHTML = "irgedwas";`{:.language-javascript}  
  
Gut. Und was ist mit folie\_meldung? Brauchst du den Wert im weiteren Verlauf des Scripts nochmal? Wenn ja, gut.  
  

> > Da beide Variablen lokal sind (durch die Deklaration mit var), werden sie auch beide beim Verlassen der Funktion umgehend entsorgt. Welcher Sinn steckt dahinter?  
> der sinn besteht darin,das diese nur zum "anschauen" sind.  
  
"Anschauen" heißt Debugging?  
Gut gedacht, aber ich rate davon ab, für Debugging-Zwecke zusätzliche Variablen ins Leben zu rufen. Untersuche die, die sowieso schon existieren, sonst besteht die Gefahr, durch die zusätzliche Zuweisung zusätzliche Fehler einzuschleusen oder einen anderen Wert anzuschauen als den, mit dem man tatsächlich weiterarbeitet.  
  

> ich hab das ein wenig anders gelöst.habe 2 verschiedene onclicks eingefügt,also zum einem onclick="bestätigung()",zum anderem onclick="abbrechen()".  
  
Okay. Ich hatte mich schon gewundert, dass im Originalcode beide Buttons dieselbe Funktion aufrufen.  
  

> wollte das ich mittels einer funktion beide onclicks zusammen abfrage.  
  
Das kannst du tun - aber dann musst du deiner Funktion einen Parameter übergeben, der beschreibt, was zu tun ist (Abbrechen oder Bestätigen).  
  
So long,  
 Martin  

-- 
Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.