안녕하세요 저자님.
열심히 공부하다가 또 왔습니다.
이벤트리스너에 관한 질문드립니다.
https://ancandy.github.io/web1/s7%EC%98%A4%EB%A5%98.html
p.385 실습 7번-1 문제 해결중에
p.363 방식으로 아래와 같이 작성했더니 오류가 발생했습니다.
imgs[1].onclick='this.style.transform="rotate(90deg)"';
Q. 왜 작동이 안되는건가요?
혹시, html태그 내에서 onclick 프로퍼티로 접근할때는 가능하지만,
DOM객체의 onclick 프로퍼티로 접근할때는 함수명만 할당을 해야하는건가요?
DOM객체의 onclick 프로퍼티로 접근할때는 함수명이나 함수를 할당 해야합니다.
익명의 함수를 사용하면 다음과 같이 할 수 있습니다. 익명의 함수 사용법은 9장 394페이지에 있습니다.
imgs[1].onclick=function(e) {
e.target.style.transform="rotate(90deg)"
}
여기서 e는 이벤트 객체이고 이벤트 객체로 부터 어느 DOM 객체에 이벤트가 발생하였는지를 알아내기 위해
e.target을 사용한 것입니다. img[1]과 같은 것들을 가능하면 코드에 넣지 않는 것이 바람직합니다.
그러니까 함수 change()도 다음과 같이 고치면 좋죠.
function change(e){
e.target.style.transform="rotate(90deg)";
}
두 이미지에 대해 모두 다음과 같이 하나의 change() 함수를 사용할 수 있슴니다.
var imgs = document.getElementsByTagName("img");
imgs[0].onclick=change;
imgs[1].onclick=change;
function change(e){
e.target.style.transform="rotate(90deg)";
}