2015-02-09 3 views
5

У меня есть этот HTMLПроверьте курсор родителя внутри элемента

<div class='parent'> 
    <div class='child'></div> 
</div> 

Я хочу добавить наведении курсора мыши и MouseOut события parent элемента, но проблема в том, когда курсор при наведении child elemet это пожары MouseOut событие хотя он acually еще внутри parent элемент. как я могу избежать этого, чтобы событие mouseout срабатывало только тогда, когда курсор покидает parent.

$(body).on('mouseover', '.parent' , function(){ /* do somthing */}); 
$(body).on('mouseout', '.parent' , function(){ /* do another somthing */}); 
+0

вы можете добавить свой код CSS? добавьте блок отображения в родительский элемент и проверьте –

ответ

3

Использование mouseenter и mouseleave вместо от mouseover и mouseout, который решит вашу проблему.

$(document).on('mouseenter', '.parent' , function(){ 
    console.log("Mouse Enter"); 
}); 
$(document).on('mouseleave', '.parent' , function(){ 
     console.log("Mouse Leave"); 
}); 

Не используйте stopPropagation() потому The Dangers of Stopping Event Propagation.

Demo

1

Вы должны остановить propagation от event на ребенка:

$(body).on('mouseover', '.child' , function(e){ 
    e.stopPropagation(); 
}); 
$(body).on('mouseout', '.child' , function(e){ 
    e.stopPropagation(); 
}); 
0

Используйте MouseEnter/MouseLeave событий вместо наведения мыши/отведении указателя мыши:

$(body).on('mouseenter', '.child' , function(e){ 

}); 
$(body).on('mouseleave', '.child' , function(e){ 

}); 
+0

. Этот ответ проиллюстрирован здесь: http://jsfiddle.net/ZCWvJ/600/ –

+0

Нет никакой разницы. Ключевым моментом здесь является то, что вы прекращаете распространение событий (это то, что мой ответ делает, что вы, похоже, украли). – mattytommo

+0

Да, вы правы, я просто скопировал плохой код от вас и изменил имена событий, просто забыл удалить глупые вызовы e.stopPropagation. Спасибо за напоминание. –

Смежные вопросы