본문 바로가기

웹 프로그래밍/JavaScript

[JS] 작성한 함수가 제대로 작동하지 않는 문제 (원인 : 자스크립트 내에 이미 있는 함수일 경우)

상황 : 계산기 기능을 구현하기 위해 코딩을 하고 있었다. 그런데, 스크립트에서 선언한 write()라는 함수가 제대로 작동하지 않았다. text 타입에 문자열을 이어붙이는 역할을 하는 함수인데, 자꾸만 화면에 해당하는 숫자만 출력되었다.

 

원인 : 알고봤더니, onclick ="write(블라블라)" 라고 작성하면, document.write(블라블라) 가 실행되었다. 나와 같은 문제를 기존에 겪은 분이 있어서 수월하게 이해됐다. 앞으로, 함수가 제대로 작동하지 않으면 '자바스크립트 내에서 이미 사용하고 있는 함수명' 인지 조사해보자.

 

해결 : wirte() 함수를 add 라는 함수명으로 바꿨더니 잘 실행됐다.

 

+ 추가사항 : clear 이란 함수도 자바스크립트 내에 이미 존재하는 함수다. 따라서 reset으로 변경했다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>

 	td {
		width : 50px;
		height : 50px;
	}
	
	input {
		width : 96%;
		height :96%;
		font-size: 20px;
	}
	 
        
</style>
<script>
	function write(expression){
		let display = document.getElementById('display');
        display.value += expression;
	}
	
	function calculate(){
        let display = document.getElementById('display');
        let result = eval(display.value);
        display.value = result;
	}
	
	function clear(){
		let display = document.getElementById('display')
		display.value = '';
	}
	
</script>
</head>
<body>
	
	<table border = "1">
		<tr>
			<td colspan = "4"><input type = "text" id = "display"></td>
			
		</tr>
		<tr>
			<td><input type = "button" value ="7" onclick = "write(7)"/></td>
			<td><input type = "button" value ="8" onclick = "write(8)" /></td>
			<td><input type = "button" value ="9" onclick = "write(9)"/></td>
			<td><input type = "button" value ="/" onclick = "write(/)"/></td>
		</tr>
		<tr>
			<td><input type = "button" value ="4" onclick = "write(4)"/></td>
			<td><input type = "button" value ="5" onclick = "write(5)"/></td>
			<td><input type = "button" value ="6" onclick = "write(6)"/></td>
			<td><input type = "button" value ="*" onclick = "write(*)"/></td>
		</tr>
		<tr>
			<td><input type = "button" value ="1" onclick = "write(1)"/></td>
			<td><input type = "button" value ="2" onclick = "write(2)"/></td>
			<td><input type = "button" value ="3" onclick = "write(3)"/></td>
			<td><input type = "button" value ="-" onclick = "write(-)"/></td>
		</tr>
		<tr>
			<td><input type = "button" value ="0" onclick = "write(0)"/></td>
			<td><input type = "button" value ="." onclick = "write(.)"/></td>
			<td><input type = "button" value ="+" onclick = "write(+)"/></td>
			<td><input type = "button" value ="%" onclick = "write(%)"/></td>
		</tr>
		<tr>
			<td colspan = "2"><input type = "button" value ="=" onclick = "calculate()"/></td>
			<td colspan = "2"><input type = "button" value ="Clear" onclick = "clear()"/></td>
		</tr>

	</table>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>

 	td {
		width : 50px;
		height : 50px;
	}
	
	input {
		width : 96%;
		height :96%;
		font-size: 20px;
	}
	 
        
</style>
<script>
	function add(expression){
		let display = document.getElementById('display');
        display.value += expression;
	}
	
	function calculate(){
        let display = document.getElementById('display');
        let result = eval(display.value);
        display.value = result;
	}
	
	function reset(){
		let display = document.getElementById('display')
		display.value = " ";
	}
	
</script>
</head>
<body>
	
	<table border = "1">
		<tr>
			<td colspan = "4"><input type = "text" id = "display"></td>
			
		</tr>
		<tr>
			<td><input type = "button" value ="7" onclick = "add(7)"/></td>
			<td><input type = "button" value ="8" onclick = "add(8)" /></td>
			<td><input type = "button" value ="9" onclick = "add(9)"/></td>
			<td><input type = "button" value ="/" onclick = "add('/')"/></td>
		</tr>                                                
		<tr>                                                 
			<td><input type = "button" value ="4" onclick = "add(4)"/></td>
			<td><input type = "button" value ="5" onclick = "add(5)"/></td>
			<td><input type = "button" value ="6" onclick = "add(6)"/></td>
			<td><input type = "button" value ="*" onclick = "add('*')"/></td>
		</tr>                                                
		<tr>                                                 
			<td><input type = "button" value ="1" onclick = "add(1)"/></td>
			<td><input type = "button" value ="2" onclick = "add(2)"/></td>
			<td><input type = "button" value ="3" onclick = "add(3)"/></td>
			<td><input type = "button" value ="-" onclick = "add('-')"/></td>
		</tr>                                                
		<tr>                                                 
			<td><input type = "button" value ="0" onclick = "add(0)"/></td>
			<td><input type = "button" value ="." onclick = "add('.')"/></td>
			<td><input type = "button" value ="+" onclick = "add('+')"/></td>
			<td><input type = "button" value ="%" onclick = "add('%')"/></td>
		</tr>
		<tr>
			<td colspan = "2"><input type = "button" value ="=" onclick = "calculate()"/></td>
			<td colspan = "2"><input type = "button" value ="Clear" onclick = "reset()"/></td>
		</tr>

	</table>
</body>
</html>

 

 

>>>참조 : https://csy7792.tistory.com/14