Reputation: 19
let knopkes = document.querySelectorAll(`button`);
let score = document.querySelector(`#score`)
let seven = knopkes[0];
let eight = knopkes[1];
let nine = knopkes[2]
let daugyba = knopkes[3]
let four = knopkes[4]
let five = knopkes[5]
let six = knopkes[6];
let minusas = knopkes[7];
let one = knopkes[8];
let two = knopkes[9];
let three = knopkes[10];
let pliusas = knopkes[11];
let pliusMinus = knopkes[12];
let zero = knopkes[13];
let dot = knopkes[14];
let equal = knopkes[15];
let result ;
knopkes.forEach(el =>{
el.addEventListener(`click`,()=>{
score.textContent = score.textContent +=el.textContent;
})
})
equal.addEventListener(`click`,()=>{
score.textContent = eval(score.textContent)
})
//Function("return " + userInput)();
button:hover{
background-color:#8da725
}
#content{
width:300px;
display:grid;
grid-template-columns:repeat(4,1fr) ;
}
button{
background-color: #bad455;
width:100px;
height:100px;
}
#score {
font-size:50px;
text-align: end;
width:400px;
height: 100px;;
background-color: aqua;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="pro4.css">
</head>
<body>
<div id="score"></div>
<div id="content">
<button>7</button>
<button>8</button>
<button>9</button>
<button>x</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button>-</button>
<button>1</button>
<button>2</button>
<button>3</button>
<button>+</button>
<button>-+ </button>
<button>0</button>
<button>.</button>
<button>= </button>
</div>
<script src="pro4.js"></script>
</body>
</html>
But the assignment symbol is correct isn't it? If the double or triple equality sign means comparing, the single one is for assignment right? So why do I get the error then? Any help is helpful.
Upvotes: 1
Views: 319
Reputation: 626
Your adding up the textContent
value like "84x7":
eval("84x7");
You need to replace the x
(times) operator with javascript; example:
var val = "84x7";
val.replace(/\x/g, "*").replace(/\=/g, "");
// 84*7
Then calculate it:
eval((score.textContent).replace(/\*/g, "*"));
Here's a live example.
let knopkes = document.querySelectorAll(`button`);
let score = document.querySelector(`#score`)
let seven = knopkes[0];
let eight = knopkes[1];
let nine = knopkes[2]
let daugyba = knopkes[3]
let four = knopkes[4]
let five = knopkes[5]
let six = knopkes[6];
let minusas = knopkes[7];
let one = knopkes[8];
let two = knopkes[9];
let three = knopkes[10];
let pliusas = knopkes[11];
let pliusMinus = knopkes[12];
let zero = knopkes[13];
let dot = knopkes[14];
let equal = knopkes[15];
let result ;
knopkes.forEach(el =>{
el.addEventListener(`click`,()=>{
score.textContent = score.textContent +=el.textContent;
})
})
equal.addEventListener(`click`,()=>{
score.textContent = eval((score.textContent).replace(/\x/g, "*").replace(/\=/g, ""))
})
//Function("return " + userInput)();
button:hover{
background-color:#8da725
}
#content{
width:300px;
display:grid;
grid-template-columns:repeat(4,1fr) ;
}
button{
background-color: #bad455;
width:100px;
height:100px;
}
#score {
font-size:50px;
text-align: end;
width:400px;
height: 100px;;
background-color: aqua;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="pro4.css">
</head>
<body>
<div id="score"></div>
<div id="content">
<button>7</button>
<button>8</button>
<button>9</button>
<button>x</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button>-</button>
<button>1</button>
<button>2</button>
<button>3</button>
<button>+</button>
<button>-+ </button>
<button>0</button>
<button>.</button>
<button>= </button>
</div>
<script src="pro4.js"></script>
</body>
</html>
I also recommend parsing the math, so if the user types in x9
then it'll give you an error. The syntax will look like this: *9
, You need to put "0" before it:
("*7").replace(/\*/g, " *").replace(/\+/g, " +").replace(/\-/g, " -").replace(/\//g, " /").replace(/ /g, "0");
// 0*7
Upvotes: 0
Reputation: 1390
The error is coming because the eval
formula is wrong, when you create for example 3+2
and you press =
is making the eval
function with the value 3+2=
and that is wrong, I recommend you separate in 2 values, one to display and other to calculate and use an if to don't include the =
in the eval
expression like this:
let knopkes = document.querySelectorAll(`button`);
let score = document.querySelector(`#score`)
let seven = knopkes[0];
let eight = knopkes[1];
let nine = knopkes[2]
let daugyba = knopkes[3]
let four = knopkes[4]
let five = knopkes[5]
let six = knopkes[6];
let minusas = knopkes[7];
let one = knopkes[8];
let two = knopkes[9];
let three = knopkes[10];
let pliusas = knopkes[11];
let pliusMinus = knopkes[12];
let zero = knopkes[13];
let dot = knopkes[14];
let equal = knopkes[15];
let result ;
knopkes.forEach(el =>{
el.addEventListener(`click`,()=>{
if (el.textContent != "="){
score.textContent +=el.textContent;
}
})
})
equal.addEventListener(`click`,()=>{
score.textContent = eval(score.textContent)
})
//Function("return " + userInput)();
button:hover{
background-color:#8da725
}
#content{
width:300px;
display:grid;
grid-template-columns:repeat(4,1fr) ;
}
button{
background-color: #bad455;
width:100px;
height:100px;
}
#score {
font-size:50px;
text-align: end;
width:400px;
height: 100px;;
background-color: aqua;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="pro4.css">
</head>
<body>
<div id="score"></div>
<div id="content">
<button>7</button>
<button>8</button>
<button>9</button>
<button>x</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button>-</button>
<button>1</button>
<button>2</button>
<button>3</button>
<button>+</button>
<button>-+ </button>
<button>0</button>
<button>.</button>
<button>=</button>
</div>
<script src="pro4.js"></script>
</body>
</html>
Upvotes: 1