2017-12-17 6 views
0

Ich versuche herauszufinden, warum meine JavaScript-Funktion meine JS-Variable nicht speichert.Ich kann nicht herausfinden, warum Javascript meine Variable nicht speichert

Hier ist das Problem. Ich stoppe meine storeMacAddress-Funktion mit einem onclick-Ereignis, und die Warnung zeigt, dass die Variable 'userMac' den Formularwert richtig erhält. Ich muss in der Lage sein, diesen Wert später zu verwenden, also brauche ich den Wert, der in einer Variablen gespeichert wird, die meine anderen Funktionen verwenden können.

Wenn ich jedoch meine testVariable-Funktion aufrufen, sagt die Konsole, dass die Variable 'usermac' nicht definiert ist.

Hier ist das javascript:

function storeMacAddress() 
{ 
    var userMac = document.getElementById("MacAddress").value 
    alert("testing: " + userMac); 
    return userMac; 
} 

function testVariable(MacAddress) 
{ 
    alert(MacAddress); 
} 

Hier ist der HTML-

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
<script src='./index.js'> 
</script> 
</head> 
<body> 

<h1></h1> 
<p></p> 
<div> 
    <form id="userRequest"> 
    Mac Address: <input type="text" id="MacAddress"><br> 
    <input type="submit" 
    onclick="storeMacAddress();" 
    value="Save Mac Address"> 

    </form> 
</div> 


<button onclick=" 
testVariable(userMac); 
">Test</button> 



</body> 
</html> 
+1

'userMac' im Rahmen der Funktion' storeMacAddress' definiert ist, dafür 'testVariable' keinen Zugang hat und nicht in diesem Parameter übergibt –

Antwort

1

Da Sie die Variable innerhalb der Funktion definieren, ist es außerhalb der Funktion oder sogar auf andere Funktionen nicht sichtbar ist, wir also kann es außerhalb definieren, wo es für alle Funktionen zugänglich ist, Sie können nur Werte innerhalb der Funktion zuweisen oder auf sie innerhalb der Funktion zugreifen!

  • Anmerkung: Ich habe type attribute von input in Text geändert, so dass die Variablenzuweisung im Snippet sichtbar ist!

var userMac; 
 

 
function storeMacAddress() { 
 
    userMac = document.getElementById("MacAddress").value 
 
    if (userMac) 
 
    alert("testing: " + userMac); 
 
    return userMac; 
 
} 
 

 
function testVariable(MacAddress) { 
 
    if (MacAddress) 
 
    alert(MacAddress); 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title></title> 
 
    <script src='./index.js'> 
 
    </script> 
 
</head> 
 

 
<body> 
 

 
    <h1></h1> 
 
    <p></p> 
 
    <div> 
 
    <form id="userRequest"> 
 
     Mac Address: <input type="text" id="MacAddress"><br> 
 
     <input type="button" onclick="storeMacAddress();" value="Save Mac Address"> 
 

 
    </form> 
 
    </div> 
 

 

 
    <button onclick=" 
 
testVariable(userMac); 
 
">Test</button> 
 

 

 

 
</body> 
 

 
</html>

+0

ich jetzt sehen, was ich falsch mache, half Ihr Code sehr viel. danke –

+0

@TomD Gern geschehen! Lesen Sie mehr über Javascript-Variablen [hier] (http://javascriptdissexy.com/javascript-variable-scope-and-hoisting-explained/) –

1
  1. Sie erstellen die Variable im Rahmen der Funktion, und nicht innerhalb einer Schließung. Erfahren Sie mehr über Schließung.
  2. Sie verkabeln die Funktion inline, was bedeutet, dass Ihre Rückkehr völlig nutzlos ist. Suche das Konzept des "unaufdringlichen JavaScript" nach. Halten Sie JS und HTML getrennt, wenn Sie keine Sichtenbindungsebene wie JSX verwenden, und behalten Sie Ihre Dienste und Ihre Ansichtslogik getrennt.
  3. Sie verwenden einen submit, innerhalb eines Formulars. Selbst wenn dies getan wurde, was Sie wollten, würde die Seite sofort neu geladen werden, und Sie würden alles verlieren. Suchen Sie nach Formularaktionen.
  4. Um an den Server zu senden, sollte Ihr Formularfeld eine name haben.
+0

Danke für die Eingabe. Ich werde das untersuchen. –

Verwandte Themen