Reputation: 1190
Building JS calculator as per freecodecamp
front end track. My problem is that I have an idea how this can be implemented by using jQuery, but having problems with turning it into pure javascript .
Codepen: https://codepen.io/ekilja01/pen/MoXROe
jQuery:
$("#clear,#clearall").click(function(){
number = "";
totalNumber.text("0");
if ($(this).attr("id") === "clearall") {
newNumber = "";
}
}
I'm trying this, but it doesn't work
["clear", "clearAll"].forEach.call(function(e){
e.addEventListener("click", function(){
totalNumber.textContent = "0";
});
});
js:
document.addEventListener("DOMContentLoaded", function (event) {
console.log("DOM OK");
// Declare variables for number, new number and operators
var number = "";
var newNumber = "";
var operator = "";
// Declare variable total number to display total on the calculator's display
var totalNumber = document.getElementById("total");
totalNumber.textContent = "0";
// Testing if number displayed is longer than 6 digits and if it is - Err to be displayed
var testNumLength = function(number) {
if (number.length > 6) {
number = "";
totalNumber.textContent = "Err";
}
}
document.getElementById("numbers").addEventListener("click", function(e){
number += e.target.textContent;
totalNumber.textContent = number;
testNumLength(number);
})
var clear = document.getElementById("clear");
var clearAll = document.getElementById("clearall");
})
["clear", "clearAll"].forEach.call(function(e){
e.addEventListener("click", function(){
totalNumber.textContent = "0";
});
});
Upvotes: 0
Views: 332
Reputation: 45121
This code has some wrong assumptions about how forEah
works
["clear", "clearAll"].forEach.call(function(e){
e.addEventListener("click", function(){
totalNumber.textContent = "0";
});
});
forEach
method inherited from Array.prototype
so you don't need to use forEach.call
["clear", "clearAll"]
is an array of strings (not DOM elements) so you need to either construct an array of DOM elements or get those elements by id inside forEach
method.Pick one of the following options
Select elements by id and iterate
var clear = document.getElementById("clear");
var clearAll = document.getElementById("clearall");
})
[clear, clearAll].forEach(function(e){
e.addEventListener("click", function(){
totalNumber.textContent = "0";
});
});
or iterate over NodeList
you get from querySelectorAll
[].forEach.call(document.querySelectorAll('#clear, #clearAll'), function(el) {
...
})
or iterate over ids and get element by id
['clear', 'clearAll'].forEach(function(id) {
document.getElementById(id).addEventListener('click', ...)
})
Upvotes: 1