마우스 오버 이벤트와 마우스 입력 이벤트의 차이점은 무엇입니까?


152

나는 항상 mouseover이벤트를 사용 했지만 jQuery 설명서를 읽는 동안 발견했습니다 mouseenter. 그들은 정확히 같은 기능을하는 것 같습니다.

둘 사이에 차이가 있습니까? 그렇다면 언제 사용해야합니까?
( mouseout대 에도 적용 mouseleave).

답변:


117

jQuery 문서 페이지 에서 다음 예제를 시도해 볼 수 있습니다 . 아주 명확하고 대화식 데모이며 실제로 볼 수 있습니다.

요컨대, 마우스 오버 이벤트는 요소 또는 상위 요소에서 오는 요소 위에있을 때 요소에서 발생하지만 마우스 입력 이벤트는 마우스가이 요소 외부에서이 요소로 이동할 때만 발생합니다.

또는 문서따르면mouseover()

[ .mouseover()]는 이벤트 버블 링으로 인해 많은 두통을 유발할 수 있습니다. 예를 들어,이 예제에서 마우스 포인터가 Inner 요소 위로 이동하면 mouseover 이벤트가 해당 이벤트로 전송 된 다음 Outer로 흘러갑니다. 이로 인해 부적절한 마우스 오버 핸들러가 부적절한 시간에 트리거 될 수 있습니다. .mouseenter()유용한 대안 은 토론을 참조하십시오 .


40
mouseenter"마우스 요소에서 요소로 마우스를 움직일 때만 발생" 한다는 것은 사실이 아닙니다. 마우스 가 요소 외부 에서 내부로 바뀌면 이벤트가 발생 합니다. 마우스가 어느 요소에서 왔는지는 중요하지 않습니다. 마우스가 종종 부모로부터 오는 것이 사실이지만 항상 그런 것은 아닙니다. 예를 들어, 부모에 패딩이나 테두리가 없으면 마우스가 조부모로부터 똑바로 들어갈 수 있으며 mouseenter여전히 발사됩니다. 실제로 뷰포트 외부에서 요소를 입력 할 수도 있으며 (요소가 가장자리에있는 경우) 이벤트가 계속 발생합니다.
callum

2
DEMO 가장 설명입니다)
Luckylooke

실제로 데모를 가지고 놀아보십시오.
Kevin Wheeler

43

Mouseenter와 mouseleave 이벤트 버블 링에 반응 하지 않지만 mouseover와 mouseout 반응합니다 .

다음 은 동작을 설명 하는 기사 입니다.


6
이것은 완벽하게 설명합니다 : bl.ocks.org/mbostock/5247027 마우스 오버는 이벤트 버블 링으로 인해 컨테이너 내에서 마우스를 때마다 발생합니다.
Rafael Emshoff

4

이와 같은 질문에서 종종 그렇듯이 Quirksmode가 가장 적합 합니다.

jQuery의 목표 중 하나는 브라우저를 무의식적으로 만드는 것이므로 이벤트 이름을 사용하면 동일한 동작이 트리거된다고 생각합니다. 편집 : 다른 게시물 덕분에 이제는 그렇지 않습니다.


0
$(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);})
 });


요소에 자식 요소가 없지만 요소에 자식 요소가 있으면 쌍이 상당히 다르게 동작합니다. 간단히 말해서 마우스를 요소에 넣은 다음 자식에 넣으면 마우스 오버 / 마우스 아웃이 모두 발생하지만 마우스는 기술적으로 마우스가 요소 내에 있기 때문에 마우스 입력 만 발생합니다.
본격
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.