<aside> 📢 [ 코멘트 ] 올려주신 실습문제 확인해봤습니다. 잘하셨는데, 연산불가표시가 뜬후에 다시 정상적인 코드를 실행하게되면 빨간배경이 그대로 남아있게 되네요! 요부분만 수정해주시면 문제없겠습니다.
</aside>
사용자가 계산할 숫자 두 개를 입력하고 연산자도 선택하게 한다. ’=’ 버튼을 누르면 오른쪽에 계산 결과가 나오며 계산 결과가 나오는 창은 읽기만 가능하다. 이때, 나누기는 수가 0일 때 계산 결과 창의 배경이 빨갛게 변하며 ‘연산 불가’라는 하연 글자가 들어간다. 위 조건은 / 연산과 % 연산 모두 동일하다.
기본적인 계산기 틀을 만든다.
<body>
<div id="calc">
<input type="number" id="num1">
<select name="oper" id="oper">
<option value="plus">+</option>
<option value="minus">-</option>
<option value="multi">*</option>
<option value="div">/</option>
<option value="remain">%</option>
</select>
<input type="number" id="num2">
<button onclick="calcTest();">=</button>
<input type="text" id="result" disabled>
</div>
</body>
마지막 결과가 출력되는 아이디가 result인 텍스트 input 요소는 읽기 전용이므로 사용자가 접근하지 못하도록 disabled 속성을 추가하였다.
기능 구현은 자바스크립트를 통해 함수를 만들어 구현하였다.(빨간 밑줄은 코멘트에 대한 수정)
<body>
<script>
function calcTest() {
let oldNum1 = document.querySelector("#num1").value;
let oldNum2 = document.querySelector("#num2").value;
let num1 = oldNum1*1;
let num2 = oldNum2*1;
let num3 = 0;
let op = document.querySelector("#oper").value;
switch(op) {
case "plus" : num3 = num1+num2; break;
case "minus" : num3 = num1-num2; break;
case "multi" : num3 = num1*num2; break;
case "div" : if(num2===0) {
redBack();
return;
} else { num3 = num1/num2;
} break;
case "remain" : if(num2===0) {
redBack();
return;
} else {
num3 = num1%2;
} break;
}
result.value = num3;
reBack();
}
function redBack() {
let r = document.getElementById("result");
r.value = "연산불가";
r.style.backgroundColor = "red";
r.style.color = "white";
}
function reBack() {
let r = document.getElementById("result");
r.style.backgroundColor = "white";
r.style.color = "black";
}
</script>
</body>
자바스크립트 형식으로 css를 변경하려면 .getElementById와 같은 getElement 함수로만 변경 가능하다. .querySelector 함수로 하면 제대로된 기능 구현이 되지 않는다.