zwei Probleme sind Es zugegriffen werden kann; Eine davon ist, dass Ihre Variable 'milesRun' in einer Funktion deklariert ist (die verwirrenderweise auch 'milesRun' genannt wird) und daher für Ihre anderen Funktionen nicht verfügbar ist, wenn sie versuchen, darauf zuzugreifen.
Das andere ist, wie Sie versuchen, Zeichenfolgen in Zahlen (foo*1
) zu konvertieren, die NaN weiterhin ergeben, wenn nicht-numerische Eingabe zugeführt wird.
I neigen dazu, diese Technik zu verwenden, die eine Reihe möglichst zurückgibt, oder Null (wenn der Eingang nicht numerisch ist):
Number(foo) || 0;
(Eine äquivalente Kurzschrift ist +foo || 0
, aber das kann verwirrend sein, lese; Ich denke, es ist die zusätzlichen Tastenanschläge wert, um zu verdeutlichen, dass du eine Nummer machst. Leute werden oft parseInt()
vorschlagen, was in Ordnung ist, wenn du Ganzzahlen anstelle von Zahlen willst (aber vergiss nicht, das Radix mit aufzunehmen!) parseFloat()
ist eine andere Option, es gibt einige differences zwischen Number und parseFloat, die je nach Ihren Bedürfnissen mehr als die anderen machen können.)
Wie auch immer: Ende der Exkurs, hier ist ein Beispiel, das diese Technik verwendet, und übergibt die Variable MilesRun als Parameter an die anderen Funktionen. Ich habe auch die milesRun()
Funktion umbenannt - streng genommen ist dies nicht notwendig, solange die Variable mit dem gleichen Namen immer in einem Funktionsumfang enthalten ist, aber das Duplizieren von Namen ist sicher, Verwirrung zu verursachen, also am besten, es zu vermeiden.
function milesRunFn() {
var run1 = Number(document.getElementById("runDist1").value) || 0;
var run2 = Number(document.getElementById("runDist2").value) || 0;
var run3 = Number(document.getElementById("runDist3").value) || 0;
var stepInches = Number(document.getElementById("steplength").value) || 0;
var stepsRun = run1 + run2 + run3;
var milesRun = stepsRun * .0000157828 * stepInches;
milesRun = milesRun.toFixed(2);
document.getElementById("milesIRun").innerHTML = milesRun;
caloriesBurntMale(milesRun);
caloriesBurntFemale(milesRun);
}
function caloriesBurntMale(milesRun){
calories = milesRun * 124;
calories = calories.toFixed(2);
document.getElementById("calsMen").innerHTML = calories;
}
function caloriesBurntFemale(milesRun){
calories = milesRun * 105;
calories = calories.toFixed(2);
document.getElementById("calsWomen").innerHTML = calories;
}
R1: <input id="runDist1"><br>
R2: <input id="runDist2"><br>
R3: <input id="runDist3"><br>
Step: <input id="steplength"><br>
<button onclick="milesRunFn()">Go</button><br>
Miles run:<span id="milesIRun"></span><br>
Women: <span id="calsWomen"></span><br>
Men: <span id="calsMen"></span><br>
(Sie auch var milesRun
im globalen Bereich erklärt haben könnte, so dass alle Funktionen auf sie zugreifen können, aber Parameter übergeben ist wahrscheinlich ein besserer Ansatz.)
Sie können immer verwenden ' parseInt() 'https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt – NewToJS
... und Sie können' textContent' anstelle von 'innerHTML' verwenden. –
Mögliches Duplikat von [Javascript: String in Nummer konvertieren?] (Https://stackoverflow.com/questions/2843897/javascript-converting-string-to-number) – Michelangelo