Reputation: 21
There are three buttons which the user can click to increment, decrement, or reset the number (which is 0 at default). I attempted to make a reset button that seemed to work because the number was set to 0, but if I clicked the increment or decrement button, it adds/subtracts and displays the number before it was reset.
let number = 0;
function increment() {
number++;
document.getElementById("number").innerHTML = number;
}
function decrement() {
number--;
document.getElementById("number").innerHTML = number;
}
function reset() {
let number = 0;
document.getElementById("number").innerHTML = number;
}
<span id="number"></span>
<button id="increment" onclick="increment()">Increment</button>
<button id="decrement" onclick="decrement()">Decrement</button>
<button id="reset" onclick="reset()">Reset</button>
Upvotes: 1
Views: 2404
Reputation: 206593
Besides the let
typo in your code
on*
handlers attributes. JS should be in one place only. Use addEventListener() instead.type="button"
on button elements that are willingly not of type Submit (default)<span>
use an <input type="number">
element, and eventually add the readonly
attribute.stepUp()
and stepDown()
native methods// DOM utility functions:
const el = (sel, par) => (par || document).querySelector(sel);
const els = (sel, par) => (par || document).querySelectorAll(sel);
// Number inputs with arrows:
const initInputArrows = (elNum) => {
const elUp = el(".num-up", elNum);
const elDn = el(".num-down", elNum);
const elRs = el(".num-reset", elNum);
const elIn = el(".num-input", elNum);
elDn.addEventListener("pointerdown", () => elIn.stepDown());
elUp.addEventListener("pointerdown", () => elIn.stepUp());
elRs.addEventListener("pointerdown", () => elIn.value = 0);
};
els(".num").forEach(initInputArrows);
<div class="num">
<input type="number" class="num-input" min=0 max=100 step=1 value=0>
<button type="button" class="num-up">▴</button>
<button type="button" class="num-down">▾</button>
<button type="button" class="num-reset">×</button>
</div>
<div class="num">
<input type="number" class="num-input" min=0 max=100 step=0.5 value=5.5>
<button type="button" class="num-up">▴</button>
<button type="button" class="num-down">▾</button>
<button type="button" class="num-reset">×</button>
</div>
Upvotes: -1
Reputation: 630
By adding let
inside your function you are creating another (local) variable called number
instead of changing the already existing, global variable. Just leave it out to access the original variable:
function reset() {
number = 0;
document.getElementById("number").innerHTML = number;
}
As a side note: javascript already has a function called Number
, so it is best to not use such a similar name for your variable, like count
, or something a bit more descriptive like amount_of_something
.
Upvotes: 3
Reputation: 4410
Inside reset change let number = 0;
with number = 0;
<button id="increment" onclick="increment()">Increment</button>
<button id="decrement" onclick="decrement()">Decrement</button>
<button id="reset" onclick="reset()">Reset</button>
<p id='number'></p>
<script>
let number = 0;
function increment() {
number++;
document.getElementById("number").innerHTML = number;
}
function decrement() {
number--;
document.getElementById("number").innerHTML = number;
}
function reset() {
number = 0;
document.getElementById("number").innerHTML = number;
}
</script>
Upvotes: 4