메뉴 건너뛰기

2020.08.15 16:03

open 8 질문

조회 수 62 댓글 2

안녕하세요 저자님.

열심히 공부하다가 또 왔습니다.

open8 문제를 해결하는 과정에서 몇가지 질문드립니다.

https://ancandy.github.io/web1/open8.html(정상)

https://ancandy.github.io/web1/open8-error.html(오류)

 

Q1. 저는 checker라는 함수를 통해 게임의 결과를 판단하였습니다.

그런데, 위에 오류링크 checker함수 if문 조건을 아래와 같이 하니 숫자가 달라도

성공하는 오류가 발생하였습니다. 아무리 생각을 해보아도 오류의 원인을 모르겠습니다..ㅠ

function checker(){

if(spans[0].innerHTML == spans[1].innerHTML == spans[2].innerHTML)

}

Q2. 3번째 숫자를 누르면 게임의 결과가 나타나게 됩니다. 

그런데, 다시 숫자를 누르면 숫자가 바뀌는 문제점이 있었습니다.

그래서 재도전문장만 클릭가능하게 하고싶었습니다.

정상링크에서 randNum 함수가 이를 감지하여 alert와 return문으로 문제점을 해결했습니다.

하지만, 문제를 해결하기위해 억지로 한거같아서 맘에 들지 않습니다.

혹시 좀더 나은방법이 있는지 궁금합니다.

?
  • ?
    관리자 2020.08.15 20:16
    매우 열심하시는 군요.

    1. 다음 문장에서 if문은 매우 잘못된 문장입니다.
    3개의 값을 비교하기 위해서는 이런 식의 문은 잘못된 표현입니다.
    if(spans[0].innerHTML == spans[1].innerHTML == spans[2].innerHTML)

    }
    보세요.
    이 if 문의 조건이 실행되는 과정은 다음과 같습니다.
    먼저 spans[0].innerHTML == spans[1].innerHTML 를 검사합니다. 그래서 참이라고 합시다. 그러면 if문은 다음과 같이 됩니다.
    if(true == spans[2].innerHTML)

    이상하죠, 그런데 true는 1로 번역되고, 때마침 spans[2].innerHTML이 1이면
    이 if문이 참이되죠.
    혹은
    spans[0].innerHTML == spans[1].innerHTML이 서로 달라 거짓이라고 하면 false, 즉 0이되고
    if(0 == spans[2].innerHTML) 이 비교되는데 때마침 spans[2].innerHTML이 이면
    이 if문이 참이되겠죠.


    2. selectable 이라는 전역변수를 추가하여 수정해보았는데, 소스 분석해보세요.

    <script>
    var selectable = true;
    function randNum(obj){
    if(selectable == false)
    return;
    /*ar p = document.getElementById("result");
    if(p.innerHTML!=""){
    return;
    }*/
    var n = Math.floor(Math.random()*3);
    obj.innerHTML=n;
    if(obj.id == "last") {
    checker();
    selectable = false;
    }
    }
    function checker(){
    var spans = document.getElementsByTagName("span");
    var p = document.getElementById("result");

    if(spans[0].innerHTML == spans[1].innerHTML && spans[0].innerHTML== spans[2].innerHTML){
    p.innerHTML="Success(click here to do again)";
    }
    else
    p.innerHTML="fail(click here to do again)";
    }
    function retry(){
    var spans = document.getElementsByTagName("span");
    var p = document.getElementById("result");
    for(var i=0; i<spans.length;i++)
    spans[i].innerHTML=0;
    p.innerHTML="";

    selectable = true;
    }
    </script>
  • ?
    열심히 공부하는 독자 2020.08.16 12:42

    1번...그런이유였군요ㅠ
    쉽고 명쾌한 답변 감사드립니다!!
    앞으로 저자님께서 작성하신 코드스타일로 작성보겠습니다.
    감사합니다!


QnA

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

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18304
283 실습문제 7장에 8번 질문 1 abcd 2017.05.09 994
282 실습문제 7장 5번 1 유등등 2020.12.17 714
281 실습문제 7장 2번의 입력된 반대순으로 출력이 넘 힘듭니다 도움좀 주세요 제발 ㅠㅠ 도널드임 2019.05.27 1130
280 실습문제 7장 2번 질문있습니다 1 jobjob 2017.04.04 1459
279 실습문제 6장 6-(1) 어떻게 하는 건가요? 1 초보자 2020.12.23 216
278 실습문제 6장 5번 littlelion 2018.06.20 780
277 실습문제 6장 3번-2 1 어려워 2019.11.15 201
276 실습문제 5장 9번 1 file 2020.10.08 212
275 실습문제 5장 8번 1 file rrr 2018.04.18 412
274 실습문제 5장 3번 254p 1 RVQ 2018.05.10 332
273 실습문제 4장의 8번 2 file ㅁㄴㅇㄹ 2018.12.14 334
272 실습문제 4장 8번 1 2020.09.27 502
271 실습문제 3장 2번, 4장 8번 질문 다시 올려요. littlelion 2018.04.20 1590
270 실습문제 11장 4번 1 ㅎㅇ 2018.12.02 471
269 실습문제 1 키보드 향기 2020.06.07 120
268 실습 문제 4장 4번 문제에 대해서 질문드립니다. 1 ㅇㅇ 2020.10.11 122
267 실습 8장 8번 문제 질문이요! 1 2020.11.03 247
266 스타일 시트 객체 2 한성이 2022.08.09 32
265 스크립트에서 document.write로 표 만들기 질문드립니다. 1 file 입문한 사람 2020.06.08 1114
264 선생님 정말 고맙습니다 재질문도 드리고 싶습니다 file 입문한 사람 2020.04.07 137
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 11 ... 21 Next
/ 21
위로