Why my "let" variable does not clear the input field?

Viewed 181

The input field doest not reset when "let" is used but it resets when form.number.value is used


<!-- HTML CODE  -->
<form action="" class="form">
    <input type="number" id="number">
    <input type="submit" name="" id="btn">
</form>

<!-- JS CODE  -->
const form = document.querySelector('.form');

form.addEventListener('submit' , e=> {
    e.preventDefault();
    let inNumber = form.number.value;

    let randomNumber = Math.ceil(Math.random() * inNumber);
    console.log(randomNumber);
    inNumber = '';
})
4 Answers

You can use two way to reset form by, html element in this case not two way bind with variable

isNumber = ''
form.number.value = isNumber;

or use

form.reset();

<!-- JS CODE  -->
const form = document.querySelector('.form');

form.addEventListener('submit' , e=> {
    e.preventDefault();
    let inNumber = form.number.value;

    let randomNumber = Math.ceil(Math.random() * inNumber);
    console.log(randomNumber);
    isNumber = ''
    form.number.value = isNumber;
    //form.reset();
})
<!-- HTML CODE  -->
<form action="" class="form">
    <input type="number" id="number">
    <input type="submit" name="" id="btn">
</form>

Since I'm not allowed to comment yet, here's what I noticed- If we set inNumber = form.number then inNumber.value = "" resets form.number.value. But inNumber = form.number.value doesn't perform the reset job with inNumber = "". Anybody knows the reason?

That's because form.number.value is a getter

let inNumber = form.number.value; this will give you the value not the setter i.e. not by reference. So doing isNumber = ''; will only change the value of isNumber not of form.number.value

And when you do form.number.value = '' it's a setter, hence it works.

Reference: w3schools - form.input.value

numbers are essentially copy-by-value when assigned to a variable. Which means the variable holds a copy of the value not a pointer to the forms value.

Later when you do

inNumber = '';

You are simply setting the variables value. You need to set the forms value to reset it:

form.number.value = '';

Alternately you can make a reference to the object holding the value

let inNumber = form.number;
// ...
inNumber.value = '';
Related