下拉菜单-在父节点中设置时,在子节点上调用onmouseout
Drop Down menu -- onmouseout getting invoked on the child node when set in the parent node
尝试在以下链接中模拟browse catagories
https://dev.twitter.com/discussions
onmouseover
——容器扩展以适应容器中的新项目——但是,在容器中移动鼠标(扩展的容器)将导致onmouseout
被调用——即使鼠标在容器中——愚蠢的错误或没有努力找出哪里以及如何出错
代码——
<html>
<style type="text/css">
#container{
overflow: hidden;
height: auto;
width: 350px;
background-color: rgba(0,0,0,0.65);
}
.contents{
height: 30px;
width: 350px;
background-color: yellow;
float: left;
}
</style>
<script type="text/javascript" >
var foo = new Array("bar","santa","claus")
function fire(){
var contents = document.getElementById("contents")
if(contents.hasChildNodes())
return
for(i = 0 ; i < foo.length ; i++){
var tem=document.createElement("div");
tem.setAttribute("id",'cont'+i);
tem.setAttribute("class","contents");
tem.appendChild(document.createTextNode(foo[i]))
contents.appendChild(tem)
}
}
function unfire(evt){
if ((evt.target || evt.srcElement).id != "container")
return;
var contents = document.getElementById("contents");
while(contents.hasChildNodes())
contents.removeChild(contents.firstChild)
}
</script>
<div id="container" onmouseover="fire(event)" onmouseout="unfire(event)">
Move your mouse here
<div id="contents" ></div>
</div>
</html>
对不起,我原来的答案完全错了,我不确定我在想什么。当然,当鼠标移动到子对象时,mouseout
会在父对象上激发。在这种情况下,您需要检查event
对象的relatedTarget
或toElement
属性,并检查该元素是否是容器的后代。
您可以在Internet Explorer中使用contains()
,在其他浏览器中使用compareDocumentPosition()
来检查祖先。例如,将onmouseout="unfire(event)"
更改为onmouseout="unfire.call(this, event)"
,并在unfire
函数中添加以下代码:
var to = evt.relatedTarget || evt.toElement;
if((this.contains && this.contains(to)) || this.compareDocumentPosition(to) & 16)
return;
相关文章:
- 选择<李>使用普通JavaScript的子节点,而不是孙节点
- javascript从子方法调用父方法
- js循环遍历单击的元素子节点
- 如何将数据添加到json的子节点
- 删除HTML节点而不删除其子节点
- 如何在javascript DOM api中获取具有给定条件的子节点
- 仅使用某些子节点访问xml中父节点的子节点
- 检测单击子节点并发送槽事件处理程序
- 从 d3.js 中的树中选择节点的子节点
- 访问所选剑道树视图节点的子节点
- 如何在 javascript 中从子类调用父方法
- 为什么正文标记后的脚本标记在子节点中计数
- Django运行从父级导入的javascript函数,由子级调用
- 难以获取使用属性选择的节点的子节点
- 使用Javascript设置带有子节点的父节点的类's文本等于.
- 如何确定父节点是否有子节点
- 在没有 jquery 的情况下更改子节点(父节点具有 ID)中的链接文本
- 添加相同的子节点时,不能多次调用Javascript insertBefore方法
- 下拉菜单-在父节点中设置时,在子节点上调用onmouseout
- 防止在单击子节点时调用父函数