javascript - 新人请教个dom操作的问题:鼠标移入/移出父div,子div显示/隐藏。但在鼠标移出父div时,子div却仍然显示?求解
PHPz
PHPz 2017-04-10 15:12:50
[JavaScript讨论组]

情况一:当鼠标移入(onmouseover)父级p(红色)时,子p(蓝色)显示(黑点代表鼠标);

情况二:当子p(蓝色)处于显示状态时,把鼠标移动到上面。此时鼠标已经脱离父p(红色),但子p仍然显示。白色代表鼠标移动轨迹。

请问为什么鼠标移出父p(红色)时,为什么子p还能显示(蓝色)?这种表现背后的工作原理是什么样的呢?





无标题文档




    

绝对定位

PHPz
PHPz

学习是最好的投资!

全部回复(3)
PHP中文网

确实是事件冒泡的原因,如果你对这个不熟悉的话,这里有一篇文章可以看看生动详细解释javascript的冒泡和捕获,包懂包会
对你的js代码稍作修改如下:

/*获取父p和子p*/
    var father=document.getElementById('father');
    var son=document.getElementById('son');

    /*鼠标移入父p时,显示子p*/
    father.onmouseover=function(){
        alert('父级触发移入事件');
        son.style.display='block';
    };

    /*鼠标移出父p时,隐藏子p*/
    father.onmouseout=function(){
        alert('父级触发移出事件');
        son.style.display='none';
    };

    /*鼠标移入子p时*/
    son.onmouseover=function(){
        alert('子级触发移入事件');
    }

事件冒泡概括来讲就是,在一个dom树中,如果移入了son这个dom,那么移入事件会一直冒泡,也就是说会触发son及所有son祖先元素的移入事件。你可以按我的代码测试下你的路径,这样可能会体会更深。
如果你想让你移入son时不触发father的移入时间,可以取消冒泡,像如下这样在son中添加一句ev.cancelBubble=true即可。

 /*获取父p和子p*/
    var father=document.getElementById('father');
    var son=document.getElementById('son');

    /*鼠标移入父p时,显示子p*/
    father.onmouseover=function(){
        alert('父级触发移入事件');
        son.style.display='block';
    };

    /*鼠标移出父p时,隐藏子p*/
    father.onmouseout=function(){
        alert('父级触发移出事件');
        son.style.display='none';
    };

    /*鼠标移入子p时*/
    son.onmouseover=function(ev){
        alert('子级触发移入事件');
        ev.cancelBubble = true;
    }
迷茫

son 也属于 father

高洛峰

segmentfault我还不太会用,在这里感谢所有帮我解答问题的朋友,谢谢你们的热心帮助。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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