时间:2021-07-01 10:21:17 帮助过:9人阅读
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<style>
#div111{
width:200px; height :200px ; background :red; margin :100px auto auto 100px; border: 2px solid white;
}
#div222{
width:100px; height :100px; background :yellow; border: 2px solid white;
}
#div333{
width:50px; height :50px; background :blue; border: 2px solid white;
}
</style>
</head>
<body>
<div id="div111">
<div id="div222">
<div id="div333"></div>
</div>
</div>
<div id="log"></div>
<script type ="text/javascript" >
function mouse_over(event){
var elem = $(event.currentTarget),
fromElem = $(event.relatedTarget);
if(elem.has(fromElem).length === 0 || !fromElem.is(elem)){
elem.css('border-color', 'green');
log(elem.attr('id'), event.type);
}
};
function mouse_out(event){
var elem = $(event.currentTarget),
toElem = $(event.relatedTarget);
if(elem.has(toElem).length === 0 || !toElem.is(elem)){
elem.css('border-color', 'white');
log(elem.attr('id'), event.type);
}
};
function log(id, type){
$("#log").append("<div><span>" + id + "触发了<strong><font color='red'>" + type + "</font></strong>事件</span></div>");
}
$('#div111').mouseover(mouse_over);
$('#div222').mouseover(mouse_over);
$('#div333').mouseover(mouse_over);
$('#div111').mouseout(mouse_out);
$('#div222').mouseout(mouse_out);
$('#div333').mouseout(mouse_out);
</script>
</body>
</html>jquery里面还有两个神奇的事件
一个叫做mouseenter
一个叫做mouseleave
mouseenter和mouseleave这两东西完全做不到这种效果好吧。。对于嵌套的,他们就是废柴
切,我还以为是什么大问题,直接绑定一次事件就可以,使用e.target就可以进行判断具体发生在哪个元素上,根据元素来处理更节省资源。
mouseover/out是冒泡的,所以自然会引起这问题
IE下用mouseenter/leave
其他浏览器下用addEventListener注册的时候第3个参数传true就行
IE的mouseenter/leave,当鼠标从div111移动到div222的时候,会触发div111的mouseleave和div222的mouseenter,反过来当从div222到div111的时候,会触发div222的mouseleave和div111的mouseenter,完全就不符合要求,他们只适合没有嵌套的应用。
其他浏览器的捕获模式,实现这种效果不会比冒泡模式简单,而且还不兼容IE。。
但是mouseenter和mouseleave就是为解决这个问题才产生的。YUI中也有,可以处理嵌套的冒泡。
jquery的不好用?!
好不好用看场合,个人认为
$().mouseenter(function(){
//do something
});和
$().mouseover(function(event){
if(!$(this).data('mouseover').mouseover){
$(this).data('mouseover', {mouseover: true});
//do something
}
event.stopPropagation();
});没区别
以上就是jQuery嵌套元素的mouseover和mouseout事件详解的详细内容,更多请关注Gxl网其它相关文章!