메뉴 건너뛰기

관리자2020.06.09 21:50

몇 가지 설명할 부분이 있습니다.

* 첨부된 html파일에서 클릭하면 아래 1번 때문에 바로 오류납니다.  오류를 확인하려면 크롬에서 개발자 도구를 켠 다음에(마우스 오른쪽 버튼 후 검사 메뉴 )실행시켜보세요
1. onclick과 ondblclick를 하나의 객체에 함께 사용하는 것은 부적절합니다.
브라우저마다 조금씩 다를 수 있지만, 더블클릭을 하면 onclick이 먼저 불려지고 다시 ondblclick이 불려집니다.
그래서 클릭 핸들러와 더블클릭 핸들러를 함께 사용하는 것은 그다지 권하지 않습니다.
제가 이 내용을 책에 기술해 놓지 않아서 미안하네요. 책이 너무 백과사전처럼 되는 것 같아서 이런 수준의 이야기는 뺐습니다.
개정할 때는 넣어두어야 겠습니다.

2. 타이머를 등록하는 함수에 문제가 있습니다.
질문하시분은 아래와 같이 등록하면
;
function btn_OnClick(e,img){
clickState = setTimeout("btn_OnClick(e,img)", 1000);
}

매개변수로 넘어온 e와 img가 그대로 "btn_OnClick(e,img)"의 e와 img에 전달된다고 생각하는것 같습니다.
그런데 "btn_OnClick(e,img)"은 보이는 그대로 문자열입니다. 그러니까 매개변수로 넘어온 e와 img를 평가하여 그 값이 전달되지 않습니다.
"btn_OnClick(e,img)" 이 문자열 상태로 그대로 타이머가 기억하였다가.
btn_OnClick(e,img)을 실행합니다. 그러면 이때 e, img라는 변수 값이 무엇인지 모르겠다고 자바스크립트 엔진은 오류를 발생시킵니다.
그래서 클릭하여도 프로그램은 작동안하게 됩니다.

만일 다음과 같이 하였다면 어떻게 될까요?
function test(x, y){
clickState = setTimeout("z = x + y", 1000);
}
test(2,4);

test(2,4)가 호출되면 타이머 핸들러로 "z = 2 + 4"가 등록되는 것이 아니라, 그냥 "z = x + y"가 등록됩니다.
그리고 1초후에 z = x + y를 실행하려고 하지요. 그리고 이 때 변수 x와 y를 찾으려고 할텐데 이 순간에 x와 y 값을 합하여 z 값이 결정됩니다.

그래서 타이머에는 변수등의 매개변수를 가진 함수 호출문을 사용하지 않아야 합니다.

이것도 제가 책에 넣지 못했네요. 설명이 복잡하여 이 자체로 이해하는데 어려움이 있을 것 같아서였습니다......

파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
위로