2006년 7월 19일 수요일

자바스크립트에서 이벤트 취소와 전달 취소

자바스크립트에서 키 이벤트를 처리할 때 'Tab'이나 'Backspace'를 직접처리하려면 몇 가지 문제가 있습니다. Tab이나 Backspace 모두 브라우저에서 디폴트로 사용되는 키이므로 Tab이 눌렸을 때는 Tab index에 따라 HTML의 element를 순회하고, Backspace가 눌렸을 때는 이전 페이지로 돌아가는 문제가 발생하게 됩니다.

이러한 문제를 해결하기 위해서는 어떻게 해야할까요? 전에 조사했던 바로는 setTimeout을 사용하는 편법을 사용하는 것이었습니다. 그러나, 이러한 방법을 사용하지 않는 방법도 존재합니다. ^^;; preventDefault와 cancelable을 사용하는 것입니다.
bool = event.cancelable;
or
event.preventDefault();
이 두개를 사용하게 되면, 브라우져의 디폴트 동작을 취소시킬 수 있게 됩니다. preventDefault를 사용할지 또는 cancelable을 사용할지는 event에 따라 달라지게 됩니다. (※ IE에서는 return false를 해주면 됩니다.)

그리고, 이벤트가 발생했을 때 상위의 element로 이벤트를 전달하고 싶지 않을 때는 위의 cancelable이나 preventDefault가 아니라 stopPropagation을 사용해주면 됩니다. (※ IE에서는 cancelBubble을 사용하면 됩니다.)
event.cancelBubble = true;       //for IE
if(event.stopPropagation){
  event.stopPropagation();
}

관련글: DOM 객체에 EventListener 등록

※ 그러면, Input Element에 대해서 keyDown, keyPress, keyUp 이벤트를 모두 사용할 때 cancelBubble 또는 stopPropagation이나 preventDefault를 호출하면 어떻게 될까요?

정답:

more..


댓글 2개: