• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[GELOEST] Variablenübergabe mit return klappt nicht

wurzeltraktor

Neues Mitglied
Moin allerseits!

Je nach Text in einem Eingabefeld soll eine function bedingt weiterarbeiten: ist der Text = test, soll aus einer zweiten function eine andere Variable zurückgegeben werden, die dann in der caller function weiterverarbeitet wird. Den Text zur Prüfung an die zweite Funktion zu schicken ist mir gelungen, nur die Übergabe im Rückweg funktioniert nicht. Was mache ich Laie denn hier wieder falsch?

Javascript:
<!doctype html>
<head>
    <meta charset="UTF-8"/>
    <title>Test</title>
</head>
<body onload ="Reset()">
<p>Test   <input type="text" id="Inbox" style="width: 75px;">
    <input type="button" value="Test" onclick="Send()">
</p>
<script>
function Reset(){
    Inbox.value ="";
    document.getElementById("Inbox").focus();
}

function Send(returned){
    var text = document.getElementById("Inbox").value;
   
    alert ("#1 " + text);
    Receive(text)

    if (returned == undefined){
        alert ("#1.1 Ooops!  " + returned);
    }
    else {
        alert ("#1.1 Juhuu!  " + returned);  
    }
    Reset();
}

function Receive(text){
    var returned;
    var caller = arguments.callee.caller.name;
   
    if (text == "test") {
        text = "Juhuu!";
        alert ("#2 " + text + " called by " + caller);
       
        returned = "returned";
        alert ("#2.1 " + returned);
        return returned; /* sendet leider keinen Wert */
    }
   
    alert ("#2 " + text + " called by " + caller);
    Reset();
}
</script>
</body>
</html>

Die alerts verwende ich zur Kontrolle der jeweiligen Werte. Ist in Receive(...) returned vor dem return noch gefüllt, erreicht Send (..) nur noch ein undefined.

Vielen Dank und schönes Frühstück;-)
 
Ich knabbere noch am Mandelstollen ... ;-)

Der onclick-event sollte für die Fortsetzung der Send eigentlich nicht mehr relevant sein. Und Receive(text) ist auch uninteressant. Ich will mit dem Wert von returned, der in Receive() festgelegt wird in Send() weiterabeiten.

PseudoCode: Bei Eingabe von test soll in Send MachmalwasBesonderes passieren, sonst Machhalt.

Anders gefragt: Wie komme ich in Send() an den erst nach onclick definierten Returnvalue heran?
 
Zuletzt bearbeitet:
:DMandelstollen ist saugut für's Hirn!!

Mit folgenden kleinen Änderungen läuft der Code wie gewünscht:
  • var returned; //als globale Variable außerhalb der Funktionen/vor der Funktion Send() deklariert.
  • das Argument (returned) bei Send() gelöscht.
  • die Deklaration var returned; in Receive(text) gelöscht.
Vielen Dank allerseits!
 
Und jetzt noch die Globale an der richtigen Stelle wieder neutralisiert, nicht mehr benötigte alerts und Variable entfernt und dann sieht's so aus:

Javascript:
<!doctype html>
<head>
    <meta charset="UTF-8"/>
    <title>Test</title>
</head>
<body onload ="Reset()">
<p>Test   <input type="text" id="Inbox" style="width: 75px;">
    <input type="button" value="Test" onclick="Send()">
</p>
<script>
var returned; //global var

function Reset(){
    Inbox.value ="";
    document.getElementById("Inbox").focus();
}

function Send(){
    var text = document.getElementById("Inbox").value;

    Receive(text)

    if (returned == undefined){
        alert ("#2 Ooops!  " + returned + " " + text);
    }
    else {
        alert ("#2 Juhuu!  " + returned);
        returned = undefined;
    }
    Reset();
}

function Receive(text){
 
    if (text == "test") {
        text = "Juhuu!";
        returned = "I'm a Yedi!!";     
    }
}
</script>
</body>
</html>

Viel Spaß damit!
 
Hey, vielleicht darf ich mich hier auch mal kurz einklinken und du schaust nochmal in das Forum rein.

Erstmal Glückwunsch zum funktionierenden Code.
Für den Anfang sieht das doch noch gar nicht so schlecht aus.

Der Titel des Themas heißt allerdings "Variablenübergabe mit return klappt nicht". Durch das Eliminieren der return-Statements hast du jedoch geschickt um das eigentliche Problem herumgearbeitet :wink:

Vielleicht solltest du also nochmal einen Blick darauf werfen. Schau dir mal folgenden Code an:
HTML:
<body onload="reset()">
  <p>Test <input type="text" id="Inbox" style="width: 75px;">
    <input type="button" value="Test" onclick="send()">
  </p>
</body>
Javascript:
function reset() {
  Inbox.value = "";
  document.getElementById("Inbox").focus();
}

function send() {
  let text = document.getElementById("Inbox").value;

  // Denk dran, returns sind der Rückgabewert der Funktion. Warum ihn also nicht einfach speichern?
  let returnedValue = receive(text);

  if (returnedValue === undefined) {
    alert("#2 Ooops! " + text);
  } else {
    alert("#2 Juhuu! " + returnedValue);
  }
  reset();
}

function receive(text) {
  if (text == "test") {
    return "I'm a Yedi!!";
  } else {
    return undefined;
  }
}
Ich bin mir sicher, dass wenn du da 10 Minuten Zeit investierst und vielleicht ein paar Google-Suchen, du schon eine ganze Ecke weiter bist.

Und falls du Langeweile hast und dir das obere zu leicht sein sollte, hier noch was zum Knobeln:
HTML:
<body onload="reset()">
  <p>Test <input type="text" id="inbox" style="width: 75px;">
    <input type="button" value="Test" onclick="send()">
  </p>
</body>
Javascript:
let inbox = document.getElementById("inbox");

const reset = () => {
  inbox.value = "";
  inbox.focus();
}

const send = () => {
  let returnedValue = receive(inbox.value);

  if (returnedValue) {
    alert("#2 Juhuu! " + returnedValue);
  } else {
    alert("#2 Ooops! " + inbox.value);
  }
  reset();
}

const receive = (text) => {
    return text == "test" ? "I'm a Yedi!!" : undefined;
}
Kleiner Tipp: Informier dich über Arrow-Functions und Ternary operator.
 
Zurück
Oben