Javascript for loop that calculates the square root of all numbers between two data numbers, added through a form

Viewed 239

Only works with some numbers but is not working when i try to insert 3-10 for example. i don't know what is wrong. I'm still learning Javascript. Sorry for my bad english. Thank You

let btn = document.getElementById("btn")
let msg = document.getElementById("avvisi")

btn.addEventListener("click", () => {

  let primo = document.forms['modulo']['primonum'].value
  let secondo = document.forms['modulo']['secondonum'].value




  for (let i = primo; i <= secondo; i++) {

    console.log(i * i)
  }

})
<form id="modulo">
  inizio <input type="text" id="primonum"> fine <input type="text" id="secondonum">
  <input type="button" id="btn" value="go">
</form>

2 Answers

You need to convert the strings from the input to a number. The shortest way is to use an unary plus + in front of the expression.

let btn = document.getElementById("btn");
let msg = document.getElementById("avvisi");

btn.addEventListener("click", () => {
    let primo = +document.forms['modulo']['primonum'].value
    let secondo = +document.forms['modulo']['secondonum'].value
    for (let i = primo; i <= secondo; i++) {
        console.log(i * i);
    }
});
<form id="modulo">
  inizio <input type="text" id="primonum"> fine <input type="text" id="secondonum">
  <input type="button" id="btn" value="go">
</form>

primo and secondo are strings because they came from an input. So when you set i to primo i is also a string. When comparing "3" to "10", "3" is bigger than "10" because of their unicode values and it skips the loop because i <= secondo is false in this case. Doing i*i can only work with numbers so javascript turns them into numbers and it works. The solution would be to turn the strings into numbers directly.

let primo = Number(document.forms['modulo']['primonum'].value);
let secondo = Number(document.forms['modulo']['secondonum'].value);

or

let primo = +document.forms['modulo']['primonum'].value;
let secondo = +document.forms['modulo']['secondonum'].value;
Related