13

When i add a number to the input it doesn't change the value that stays at 5 and when i go in the console and type uw.value i get "6" back instead of 6 which i typed in the input on the web how do i get a number back instead of a string?

<form>
    <input type="number" id="wakken" type="number" value=5><br>
    <input max="30" min="0" name="ijsberen" placeholder="Ijsberen" id="ijsberen" type="number" value= "5"><br>
    <input max="30" min="0" name="wakken" placeholder="Penguins" id="penguins" type="number" value= 0><br>
    <input type="button" value="submit" onclick="check()">
</form>      
 var uw = document.getElementById("wakken")
 var ui = document.getElementById("ijsberen")
 var up = document.getElementById("penguins")
Hacketo
  • 4,978
  • 4
  • 19
  • 34
Knack Kwenie
  • 377
  • 2
  • 4
  • 20

4 Answers4

17

Check out HTMLInputElement.valueAsNumber:

The value of the element, interpreted as one of the following in order:

  1. a time value
  2. a number
  3. null if conversion is not possible

var testInput = document.getElementById("test-input");

function handleInput(e){
  var value = this.valueAsNumber;
  console.log("type: %s, value: %o", typeof value, value);  
}

testInput.addEventListener("input", handleInput);
  
handleInput.call(testInput);
<input type="number" id="test-input" type="number" value=5>

This will return NaN for non-numerics or non-finite numbers.

canon
  • 40,609
  • 10
  • 73
  • 97
7

HTMLInputElement.prototype.value (for <input> elements) is a string.

Convert your numeric string to a proper number using one of these:

parseInt(value, 10);  // Parsing string as integer (whole number) from left to right.
parseFloat(value);    // Parsing string as floating point number (decimal) from left to right.
Number(value);        // Converting entire string to number.

JSBin demo.

Alternatively, add a unary + before the value:

+value;               // Equivalent to `Number(value)`.

To be totally sure your value is a number, you can also do:

if(!isNaN(parseFloat(el.value)) && isFinite(el.value)){
  // true if element’s value is a number (or a number in string)
}

For example:

var uw = document.getElementById("wakken");
var ui = document.getElementById("ijsberen");
var up = document.getElementById("penguins");

// Log strings
console.log(uw.value);                // "5"
console.log(ui.value);                // "5"
console.log(up.value);                // "0"

// Log numbers
console.log(Number(uw.value));        // 5
console.log(+uw.value);               // 5
console.log(parseInt(ui.value, 10));  // 5
console.log(parseFloat(up.value));    // 0

Don’t forget to read the documentation:

Sebastian Simon
  • 18,263
  • 7
  • 55
  • 75
Roko C. Buljan
  • 196,159
  • 39
  • 305
  • 313
3

You can convert the value from string to number using parseFloat(value) for decimals or parseInt(value) for integers.

For example:

// uw will refer to the numerical value of the element with id = wakken
var uw = parseInt(document.getElementById("wakken").value);
JCOC611
  • 19,111
  • 14
  • 69
  • 90
0
var uw = parseInt(document.getElementById("wakken").value, 10); // (value, radix)
if (typeof uw === "number") console.log("works! 'uw' is an int");

Will log "works! 'uw' is an int", because we collected the value and used parseInt(_: String) to convert it to an int.

canon
  • 40,609
  • 10
  • 73
  • 97
Tim Visser
  • 916
  • 9
  • 28