我已知晓在jq中hover的API就是把mouseenter和mouseleave组合在一起来用的,在jq中实现hover:function(fnOver,fnOut){
return this.mouseenter(fnOver).mouseleave(fnOut||fnover)
}。
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script src="jquery.js"></script>
<style>
.unit-list{ width: 320px; border:1px solid #ccc;}
.member-list dd{ background-color: #ccc; margin: 5px 0;}
</style>
</head>
<body>
<dl class="unit-list">
<dt class="cf">行政学院
<span class="toggle">+</span>
</dt>
<dd>
<dl class="member-list">
<dd>张三</dd>
<dd>李四</dd>
<dd>王五</dd>
</dl>
</dd>
</dl>
<script>
$(function(){
$(".unit-list").hover(function(e){
e.stopPropagation()
console.log("E n t e r");
$(".member-list dd").mouseenter(function(e){
e.stopPropagation()
console.log(this); //鼠标移出unit-list再移入到<dd>,输出次数会叠加
});
},function(){
console.log("L e a v e");
});
})
</script>
</body>
</html>
每次
mouseenter
的时候,都会给dd
增加绑定事件,绑定事件是不会被覆盖的,而是会按照绑定先后顺序执行,所以就会执行很多次,event.stopPropagation
是阻止冒泡,不会阻止同一个节点上的其他事件。题主一可以把给
dd
的绑定事件独立于hover
之外,二是可以在hover
结束后给dd
解绑。请看如下代码:单独绑定
hover
后撤销绑定把
mouseenter
放外面去,你这样每次hover
都会绑定一次事件。事件绑定是增量关系,不是替换关系,所以你懂的