关于页面JS 鼠标触发事件的问题

我写了一个控制父DIV的mouseout的事件,当我建子DIV之后,鼠标触碰到子DIV后就判定离开了,但是我的鼠标还在父DIV的框里。这是为什么?... 我写了一个控制父DIV的mouseout的事件,当我建子DIV之后,鼠标触碰到子DIV后就判定离开了,但是我的鼠标还在父DIV的框里。这是为什么? 展开
 我来答
cainiaokan
推荐于2016-08-27 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:613万
展开全部

在DOM中。因为会有嵌套结构,因此如果鼠标指针父DIV移动到内部的子DIV上,会触发mouseout事件,这并不是bug或者什么歧义,因为mouseout的意思就是从一个元素移动到另一个元素上。并没有说另一个元素就不能是当前元素的子元素。但你的要求依然是可以实现的。就是利用事件冒泡。例如:


html中。

<html>
<head lang="en">
    <meta charset="UTF-8">
</head>
<body style="padding:0;margin:0">
<div id="sDiv" style="height:500px;background:black;padding:1px">
<div id="cDiv" style="height:100px;margin:200px;background:red"></div>
</div>
</body>
<script>

js这样写:

window.onload = function(){
    document.getElementById('sDiv').onmouseout = function(e){
        var ev = e || window.event;
        var target = ev.target || ev.srcElement;
        if(target.id === 'sDiv' && (!ev.toElement || ev.toElement.id !== 'cDiv')){
            alert('鼠标移动出了父DIV元素。');
        }
    }
}

 说白了。就是如果是移动到子元素中,不认为是移出父元素就好了,因此更加通用的写法如下:

function isParent (obj,parentObj){ 
while (obj != undefined && obj != null && obj.tagName.toUpperCase() != 'BODY'){ 
    if (obj == parentObj){ 
        return true; 
    } 
    obj = obj.parentNode; 

return false; 

window.onload = function(){
document.getElementById('sDiv').onmouseout = function(e){
    var ev = e || window.event;
    var target = ev.target || ev.srcElement;
    if(target.id === 'sDiv' && (!ev.toElement || !isParent(ev.toElement, target))){
        alert('鼠标移动出了父DIV元素。');
    }
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式