首页 > web前端 > js教程 > 正文

jQuery mouseenter方法的不冒泡如何理解?

黄舟
发布: 2017-06-28 09:51:18
原创
1265人浏览过

代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQ--mouseenter测试</title>
<style>
*{margin: 0; padding: 0; color: #fff;}
div{width: 100px; height: 100px; padding-top: 20px; background: green; margin: 100px auto;}
p{width: 150px; height: 50px; background: red;}
</style>
<script src="jquery.js"></script> <!-- 1.9.0版 -->
</head>
<body>
    <div id="d">
        <p>子元素</p>
        父元素
    </div>
<script>
var a=0;
$(function(){ 
    $('#d').mouseenter(function(){    /*#d,父元素,当mouseenter时背景变为黑色*/ 
        $(this).css('background','#000');
    });
    $('#d p').mouseenter(function(){    /*#d p,子元素,当mouseenter时背景变为黑色*/      
        $(this).css('background','#000');
    });    
});
登录后复制

**当鼠标移入子元素时,我以为只有子元素的背景变成黑色,因为.mouseenter()不冒泡,但结果父、子两个元素都变成黑色了。我不明白了,mouseenter不冒泡啊,那应该只有子元素背景变成黑色,怎么都变了?求讲解!**

1)mouseenter不冒泡是指,当以一个元素捕获到mouseenter事件后,不再通知其父元素,父元素也就不会处理mouseenter时间了2)就问题中的2个mouseenter

//只要元素进入div#d区域,mouseenter事件就会被触发
//一个mouse要进入一个子元素,必然经过其父元素,故鼠标达到子元素触发mouseenter后其父元素的mouseenter事件也会被触发
$('#d').mouseenter(function(){    /*#d,父元素,当mouseenter时背景变为黑色*/ 
    $(this).css('background','#000');
});
//只要元素进入div#d p区域,也就是div#d的子元素p区域是,mouseenter事件就会被触发
//但是此时div#d上的mouseenter事件监听不会再被触发,因为没有冒泡上去
$('#d p').mouseenter(function(){    /*#d p,子元素,当mouseenter时背景变为黑色*/      
    $(this).css('background','#000');
});
登录后复制

似乎还是不好理解那么我们就看下冒泡的mouseover是个什么样的表现

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31
查看详情 法语写作助手
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="../script/jquery-2.1.3.min.js"></script>
    <script>
        $(function(){
            /*
            $('#d'). mouseover(function(){
                $(this).css('background','orange');
                if(!$(this).data('data-count')){
                    $(this).data('data-count',1)
                }else{
                    $(this).data('data-count',$(this).data('data-count')+1);
                }
                $(this).find('span').text($(this).data('data-count'));
            });

            $('#d p').mouseover(function(){
                $(this).css('background','yellow');
                if(!$(this).data('data-count')){
                    $(this).data('data-count',1)
                }else{
                    $(this).data('data-count',$(this).data('data-count')+1);
                }
                $(this).text($(this).data('data-count'));
            });
            */
            $('#d'). mouseenter(function(){
                $(this).css('background','orange');
                if(!$(this).data('data-count')){
                    $(this).data('data-count',1)
                }else{
                    $(this).data('data-count',$(this).data('data-count')+1);
                }
                $(this).find('span').text($(this).data('data-count'));
            });

            $('#d p').mouseenter(function(){
                $(this).css('background','yellow');
                if(!$(this).data('data-count')){
                    $(this).data('data-count',1)
                }else{
                    $(this).data('data-count',$(this).data('data-count')+1);
                }
                $(this).text($(this).data('data-count'));
            });

        });

    </script>
</head>
<body>
<div id="d" style="width:200px;height:200px;background-color: greenyellow">
    <span>父元素</span>
    <p style="padding:5px;width:100px;height:100px;background-color: red;display:block">子元素</p>
</div>
</body>
</html>
登录后复制

运行上面饿代码我们能看到,每次鼠标进入子元素触发mouseover事件,就会冒泡到其父元素,进入执行父元素的mouseover事件监听-显示的数字会增加
而换成mouseenter事件监听就不会发生这样的情况-显示的数字不增加
并且在子元素的mouseover的事件监听函数中阻止冒泡-stopPropagation,父元素的事件就不会被回调

以上就是jQuery mouseenter方法的不冒泡如何理解?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号