jQuery中鼠标事件和焦点事件的细节区分

鼠标事件的细节

   当鼠标指针位于元素上方时,会发生 mouseover、mouseenter事件。

   当鼠标离开元素时,会发生mouseleave、mouseout事件

但是他们的区别又是什么?

   我们看一个例子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style>
div{
width: 100px;
height: 100px;
background: #c40000;
}
#enter{
width: 200px;
height: 200px;
background: #007aff;
}
#over{
width: 200px;
height: 200px;
background: lightsalmon;
}
</style>
</head>
<body>
<div id="enter">
<div></div>
</div>
<div id="over">
<div></div>
</div>

</body>
</html>
<script>
$("#enter").mouseenter(function () {
console.log("enter我被进入啦")
})
$("#over").mouseover(function () {
console.log("over我被进入啦")
})
$("#enter").mouseleave(function () {
console.log("leave我出去啦")
})
$("#over").mouseout(function () {
console.log("out我出去啦")
})
</script>
当我把鼠标先放到父元素大的div上面,然后再移动到小的div子元素上面,之后先离开子元素,然后离开父元素,看看会输出什么:

jQuery中鼠标事件和焦点事件的细节区分jQuery中鼠标事件和焦点事件的细节区分

   我们可以看到enter进入父元素,然后再进入子元素总共输出一次,离开时也是输出leave一次,而over进入父元素时输出进入父元素一次,之后进入子元素时,会输出out表示离开父元素,然后输出over表示进入子元素,离开子元素时会输出out表示离开子元素,之后输出over表示进入父元素,最后离开父元素时会输出out表示离开父元素。

  因此我总结是:mouseover,mouseleave在父元素设定的时候<b>会</b>冒泡到子元素mouseenter,mouseout在父元素设定的时候<b>不会</b>冒泡到子元素

焦点的细节事件

  当元素获得焦点时,触发 focusin事件和focus事件。focusin事件跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。

  但是他们的区别又是什么?我们再来看一个例子:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <style>
        div{
            width: 100px;
            height: 100px;
            background: #c40000;
        }
    </style>
</head>
<body>
<div id="one">
    <input type="text" >
</div>
<div id="two">
    <input type="text" >
</div>
</body>
</html>
<script>
    $("#one").focusin(function() {
        console.log("focusin我获得焦点啦")
    });
    $("#two").focus(function() {
        console.log("focus我获得焦点啦")
    });
    $("#one").focusout(function() {
        console.log("focusin失去焦点啦")
    });
    $("#two").blur(function() {
        console.log("focus失去焦点啦")
    });
</script>

  上面的代码说的是我们分别给input的父元素分别绑定focusin和focus两个获得焦点的事件,focusout、blur失去焦点的事件,我们来看一下他们的输出情况:

 jQuery中鼠标事件和焦点事件的细节区分jQuery中鼠标事件和焦点事件的细节区分

 

   我分别对两个输入框点击,以此获得焦点,但是会发现只有focusin,focusout这两个输出了内容,而focus,blur却没有输出任何内容。(注意:我是给输入框的父元素红色的div绑定的方法)

   由此我可以总结到:

  focusin,focusout给父元素绑定<b>会</b>监测子元素焦点的获得情况,focus,blur给给父元素绑定<b>不会</b>监测子元素焦点的获得情况
上一篇:HDLBits(1)——1.2.3.4


下一篇:MOS管寄生二极管方向判断,看完醍醐灌顶