The value
of an input
is always a string, so +
ends up being string concatenation ("10" + "10"
is "1010"
, as opposed to 10 + 10
which is 20
).
If you’re using an input type="number"
(the OP isn’t, but others finding this answer may) and the browser supports them, you can use valueAsNumber
instead:
var onerepmax = document.wodCalculate.oneRepMax.valueAsNumber;
If you’re using type="text"
or the browser doesn’t support valueAsNumber
:
You can convert user-input values using parseInt(value, 10)
(the 10 = decimal, base 10) if they’re meant to be whole numbers, e.g.:
var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10);
That’s just one option, though, you have several:
-
The unary
+
operator:value = +value
will coerce the string to a number using the JavaScript engine’s standard rules for that. The number can have a fractional portion (e.g.,+"1.50"
is1.5
). Any non-digits in the string (other than thee
for scientific notation) make the resultNaN
. Also,+""
is0
, which may not be intuitive.var onerepmax = +document.wodCalculate.oneRepMax.value;
-
The
Number
function:value = Number(value)
. Does the same thing as+
.var onerepmax = Number(document.wodCalculate.oneRepMax.value);
-
The
parseInt
function, usually with a radix (number base):value = parseInt(value, 10)
. The downside here is thatparseInt
converts any number it finds at the beginning of the string but ignores non-digits later in the string, soparseInt("100asdf", 10)
is100
, notNaN
. As the name implies,parseInt
parses only a whole number.// (Same as the first one above) var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10);
-
The
parseFloat
function:value = parseFloat(value)
. Allows fractional values, and always works in decimal (never octal or hex). Does the same thingparseInt
does with garbage at the end of the string,parseFloat("123.34alksdjf")
is123.34
.var onerepmax = parseFloat(document.wodCalculate.oneRepMax.value);
So, pick your tool to suit your use case. 🙂