메뉴 건너뛰기

조회 수 354 댓글 2

<!DOCTYPE html>

<html lang="ko">

    <head>

        <title>계산기 만들기

        </title>

        <style>

        </style>

        <meta charset="utf-8">

        <script>

            var test_array = [["Back","CE","C","="],["7","8","9","/"],["4","5","6","*"],["1","2","3","-"],["0","+","NONE","NONE"]];

            

            window.onload = function (){

                var tb = document.getElementById("tb");

                for (var i=0;i<5;i++){

                    var row = document.createElement("tr");

                    for (var j=0;j<4;j++){

                        var col = document.createElement("td");

                        var bt = document.createElement("button");

                        bt.innerHTML = test_array[i][j];

                        bt.style.height = "40px";

                        bt.style.width = "60px";

                        bt.addEventListener("click",send_text);

 

                        col.appendChild(bt);

                        

                        row.appendChild(col);

                    }

                    tb.appendChild(row);

                }

                bt.addEventListener("click",send_text);

 

            

            }  // 계산기 생성           

            

            var exp = "";

            function send_text(e){

                exp += e.target.innerHTML;

                document.getElementById("text1").value = exp;

            }

            

        </script>

    </head>

   

    <body>

        <h2>계산기 만들기</h2>

        <hr>

 

        <form>

            <input type="text" value="0" id="text1">

            <table id= "tb">

 

            </table>

        </form>

    </body>

    

 

</html>

 

계산기를 클릭하는 부분에서 숫자 1을 클릭을하면 text박스안에 값이 0 -> 1 -> 0 다시 이런식으로 됩니다. 그 이유가 왜인지 알려주실수 있을까요 

?
  • ?
    관리자 2020.11.30 15:22

    꽤 어려운 문제를 마주치게 되었군요.
    문제의 원인은 <button> 태그의 활용에 있습니다.
    교재의 134페이지의 잠깐 부분을 참고해보세오.
    <button>은 기본적으로 <buttton type="submit"> 의 속성을 가진 태그입니다. 그래서 버튼을 클릭하면 send_text() 함수를 호출한 다음
    폼 데이터를 모두 서버로 전송합니다. 그런데 현재 form 태그가 잘 만들어져 있지 않기 때문에(서버로 전송하지 않기 때문에)

     웹페이지를 reload를 하는 것으로 끝내게 됩니다. 그래서 예를 들면 버튼 7을 누르면 7이 input 창에 나오고 난 뒤 reload되 어 버리니까 다시 0으로 되는 것입니다.

    해결책은 두 가지 인데
    1. <form> 태그를 없애 버리세요. 어짜피 서버로 전송할 것은 아니잖아요?

    2. 아니면 다음과 같이 bt 객체를 만든다음 type 속성을 "button"으로 만들면 됩니다.
    var bt = document.createElement("button");
    bt.setAttribute("type", "button");

    그러면 버튼은 <button type="button"> 이 되겄지요.

    아! 그리고 for문을 빠져 나온 다음에 있는 다음 라인은 지워야 합니다.
    bt.addEventListener("click",send_text);

  • ?
    호탱 2020.12.01 16:01
    궁금증이 해결되었습니다 감사합니다!

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18285
323 385p 8장 실습문제 07번 질문입니다. 1 12345 2019.08.16 617
322 코드 잘못된 부분을 봐주시면 정말 감사하겠습니다 1 file 입문한 사람 2020.04.01 608
321 7장 실습문제 1번 질문 있습니다. 7 jonjsin 2017.11.09 603
320 timerID값이 null인 이유 1 열공이 2022.05.26 602
319 저자님 367페이지 질문있습니다~~ 1 file 칼잡이최제잘 2018.02.19 592
318 6장 7번 좀 알려주세요 ㅜㅜ 1 어려워여 2020.06.14 590
317 9장 onblur onfocus 활용 실습문제 2번 웹린이 2018.05.21 569
316 4장 6번문제 물어볼려고합니다 1 배재한 2019.04.16 566
315 5장 실습문제 9번 1 file 123 2018.10.03 563
314 교과서 13장 연습문제 1 알고싶어요 2021.05.29 553
313 9장 4번 질문있습니다. 웹프로그래밍 2017.05.28 551
312 이미지를 HTML 파일과 같은 폴더에 저장하였는데 왜 이미지가 보이지 않을까요? 1 황기태 2017.03.27 547
311 바닐라js 란 것에 대해 질문이 있습니다. 2 muuum 2018.11.01 546
310 1장 test1, 2, 3 파일 2 열공중 2020.03.07 542
309 간단한 질문 드립니다. 1 뚜룹 2018.06.07 535
308 이 책을 다 본 뒤 어떤 공부를 더 하는게 좋을까요? 1 file muuum 2018.10.31 526
307 8장 실습문제 8번 질문드립니다. 3 메론 2018.11.11 525
306 명품 HTML5+ 수정판 2장 4번 문제 문의 1 file mikael 2021.04.14 520
305 HTML5+CSS3+Javascript 웹 프로그래밍[수정판] 4 file Jenny 2021.09.25 519
304 오픈 챌린지 6장 1 ㄱㄷㄱㄷ 2018.04.22 514
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로