자바스크립트에서 클릭 이벤트 핸들러 3가지 방법과
addEventListener 와 onclick의 차이점을
알아보겠습니다.
addEventListener 와 onclick의 차이점을
알아보겠습니다.
이벤트 리스너는 이벤트가 발생했을 때 그 처리를 담당하는 함수를 가리키며,
이벤트 핸들러(event handler)라고도 합니다.
이벤트가 특정 element에서 발생하면,
웹 브라우저는 그 요소에 등록된 이벤트 리스너를 실행시킵니다.
가장 보편적으로 자주 사용되는 이벤트 리스너는 click 이벤트입니다.
click event는 사용자가 element에 클릭하였을 때의 동작하는 이벤트입니다.
click 이벤트 사용 방법
1. onclick 이벤트 - HTML 코드에서 inline 방식 (in HTML)
- 자바스크립트를 지원하는 모든 브라우저에서 HTML 코드에서 바로 이벤트 리스너를 인라인 방식으로 넣을 수 있습니다.
- 단점: HTML 코드에 자바스크립트 코드가 추가되어 가독성이 안 좋아지며, 유지보수도 힘들어집니다.
<element onclick="myScript">
* myScript = 리스너(작동될 함수)
예제1
<div onclick="alert('hello');">Click</div>
예제 2
<div onclick="hey();">Click</div>
<script>
function hey() {
alert("hello");
}
</script>
2. onclick 이벤트 - 자바스크립트에 등록 (in JavaScript)
- 단점: 하나의 이벤트 리스너만을 등록할 수 있습니다.
object.onclick = function(){myScript};
예제 1
<div class="click">Click</div>
<script>
let click = document.querySelector(".click");
click.onclick = function() {
alert("hello");
}
</script>
3. addEventListener() 메서드
- 개발자가 가장 추천하는 모던한 방식입니다.
- addEventListener() 메서드는 거의 모든 브라우저에서 지원하는 이벤트 리스너 등록을 위한 메서드입니다.
- addEventListener() 메서드에서는 "on"이 붙지 않습니다.
- 단점: addEventListener() 메서드는 익스플로러 8과 그 이전 버전에서는 지원하지 않으므로,
대신에 이와 유사한 동작을 하는 attachEvent() 메서드와 detachEvent() 메서드를 사용해야 합니다.
object.addEventListener("click", myScript);
예제 1
<div class="click">Click</div>
<script>
let click = document.querySelector(".click");
click.addEventListener("click", function() {
alert("hello");
});
</script>
자. 이제 어떤 것을 사용해야 할까요?
onclick 메소드과 addEventListener 메서드를 비교해 보겠습니다.
onclick은 overwriting이 불가능
onclick에는 하나의 콜백 함수(리스너)만 지정할 수 있지만,
addEventListener는 여러 개의 이벤트 리스너를 추가할 수 있습니다.
따라서 만약 onclick 이벤트 핸들러를 두 번 이상 사용한다면
기존 이벤트 핸들러를 덮어쓰기 때문에 가장 아래에 추가한 핸들러만 작동합니다.
예제
<button class="click">
click
</button>
<script>
let click = document.querySelector(".click");
click.onclick = function() {
alert("onclick1");
}
click.onclick = function() {
alert("onclick2");
}
click.addEventListener("click", function() {
alert("addEventListener1");
})
click.addEventListener("click", function() {
alert("addEventListener2");
})
</script>
결과 보기
onclick에서는 1번이 실행되지 않고, 바로 2번이 실행되고,
addEventListener에서는 모두 실행합니다.
브라우저 호환성
- onclick은 모든 브라우저와 버전에서 호환이 됩니다.
- addEventListener는 Internet Explorer 6,7,8 에서는 호환되지 않습니다.
- 호환성에 중점을 두고 사용한다면, 사용자가 정말 옛날 버전의 IE를 사용할 가능성 여부를 확인하여야 합니다.
결론
어떤 메소드를 사용해야 할까요?
위의 구형 브라우저 호환성의 문제가 있다면 onclick을 사용하지만,
그 외에는 개발자가 추천하는 모던한 방식의 addEventListener 사용을 추천합니다.
위의 구형 브라우저 호환성의 문제가 있다면 onclick을 사용하지만,
그 외에는 개발자가 추천하는 모던한 방식의 addEventListener 사용을 추천합니다.
반응형
'개발 > Javascript' 카테고리의 다른 글
[js] DOM과 BOM의 차이점 (0) | 2020.10.07 |
---|---|
[js] let vs const vs var (ft. var의 문제점, 호이스팅) (0) | 2020.10.06 |
[js] input option 값 출력하기(ft. onchange onfocus) (0) | 2020.09.20 |
[js] 자바스크립트 회원가입 유효성 검사(ft. form input 정규식) (0) | 2020.07.24 |
[js] 자바스크립트 버튼 클릭시(onclick) 마다 배경 색상 변경하기 (0) | 2020.07.13 |
댓글