나는 항상 mouseover
이벤트를 사용 했지만 jQuery 설명서를 읽는 동안 발견했습니다 mouseenter
. 그들은 정확히 같은 기능을하는 것 같습니다.
둘 사이에 차이가 있습니까? 그렇다면 언제 사용해야합니까?
( mouseout
대 에도 적용 mouseleave
).
나는 항상 mouseover
이벤트를 사용 했지만 jQuery 설명서를 읽는 동안 발견했습니다 mouseenter
. 그들은 정확히 같은 기능을하는 것 같습니다.
둘 사이에 차이가 있습니까? 그렇다면 언제 사용해야합니까?
( mouseout
대 에도 적용 mouseleave
).
답변:
jQuery 문서 페이지 에서 다음 예제를 시도해 볼 수 있습니다 . 아주 명확하고 대화식 데모이며 실제로 볼 수 있습니다.
요컨대, 마우스 오버 이벤트는 요소 또는 상위 요소에서 오는 요소 위에있을 때 요소에서 발생하지만 마우스 입력 이벤트는 마우스가이 요소 외부에서이 요소로 이동할 때만 발생합니다.
또는 문서 에 따르면mouseover()
[
.mouseover()
]는 이벤트 버블 링으로 인해 많은 두통을 유발할 수 있습니다. 예를 들어,이 예제에서 마우스 포인터가 Inner 요소 위로 이동하면 mouseover 이벤트가 해당 이벤트로 전송 된 다음 Outer로 흘러갑니다. 이로 인해 부적절한 마우스 오버 핸들러가 부적절한 시간에 트리거 될 수 있습니다..mouseenter()
유용한 대안 은 토론을 참조하십시오 .
Mouseenter와 mouseleave 는 이벤트 버블 링에 반응 하지 않지만 mouseover와 mouseout 은 반응합니다 .
다음 은 동작을 설명 하는 기사 입니다.
$(document).ready(function() {
$("#outer_mouseover").bind
("Mouse Over Mouse Out",function(event){
console.log(event.type," :: ",this.id);})
$("#outer_mouseenter").bind
("Mouse enter Mouse leave",function(event){
console.log(event.type," :: ",this.id);})
});
mouseenter
"마우스 요소에서 요소로 마우스를 움직일 때만 발생" 한다는 것은 사실이 아닙니다. 마우스 가 요소 외부 에서 내부로 바뀌면 이벤트가 발생 합니다. 마우스가 어느 요소에서 왔는지는 중요하지 않습니다. 마우스가 종종 부모로부터 오는 것이 사실이지만 항상 그런 것은 아닙니다. 예를 들어, 부모에 패딩이나 테두리가 없으면 마우스가 조부모로부터 똑바로 들어갈 수 있으며mouseenter
여전히 발사됩니다. 실제로 뷰포트 외부에서 요소를 입력 할 수도 있으며 (요소가 가장자리에있는 경우) 이벤트가 계속 발생합니다.