mouseout and border??? 既然两个DIV一样大,那么为什么不给外面那个DIV加上onmouseout事件呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的问题是 我希望toElement不是外面的的那个div,冒泡解决不了 外面的div加事件也解决不了 这是个人认为(如果1楼 2楼的觉得解决的了 我贴代码 在加100分..........) 搞个嵌套的CSS的就可以了啊里面的改外面的className className="praentX sonX";子层mouseout的时候,把父层的 className="praentX";父层mouseout的时候,把 className=""; 把.div加上个border:1px solid #666666;把.list1 ,list2 中的border:1px solid #666666;去掉 然后缓慢移出 ,就可以看到错误,原因就是我上面说的<style type="text/css">body,td,th {font-size: 12px;}.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px;; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}.div{width:150px; height:auto; position:absolute; cursor:pointer;}.list1{ height:auto; width:100%; padding:3px;border:1px solid #666666;background-color:#FFFFFF;color: #000000}.list2{ height:auto; width:100%; padding:3px;border:1px solid #666666; background-color:#3b97d3; color: #FFFFFF;}</style><body><div id='All'><div class="title"></div><div class="title"></div><div class="title"></div></div><script> var stack = new Array(); var menu = [ {"txt":"人族","menu":[{"txt":"大法师","menu":[{"txt":"水元素"},{"txt":"暴风雪"},{"txt":"辉煌光环"},{"txt":"瞬间移动"}]}, {"txt":"山丘之王","menu":[{"txt":"风暴之锤"},{"txt":"锥地"},{"txt":"锥晕"},{"txt":"天神下凡"}]}, {"txt":"圣骑士","menu":[{"txt":"光"},{"txt":"无敌"},{"txt":"光环"},{"txt":"复活"}]}, {"txt":"血法师","menu":[{"txt":"火焰"},{"txt":"吸蓝"},{"txt":"虚无"},{"txt":"神鸟凤凰"}]} ]}, {"txt":"兽族","menu":[{"txt":"贱圣","menu":[{"txt":"疾风步"},{"txt":"影分身"},{"txt":"致命一击"},{"txt":"剑刃风暴"}]}, {"txt":"先知男","menu":[{"txt":"狼"},{"txt":"日"},{"txt":"闪电链"},{"txt":"地震"}]}, {"txt":"牛头人酋长","menu":[{"txt":"冲击波"},{"txt":"阵地"},{"txt":"耐久光环"},{"txt":"复活"}]}, {"txt":"小YY","menu":[{"txt":"变动物"},{"txt":"治疗波"},{"txt":"小蛇棒子"},{"txt":"全体无敌"}]} ]}, {"txt":"不死族","menu":[ {"txt":"死亡骑士","menu":[{"txt":"大便"},{"txt":"光环"},{"txt":"吃人"},{"txt":"复尸体","menu":[ {"txt":"尸体"},{"txt":"40秒"},{"txt":"无敌"}] }]}, {"txt":"巫妖","menu":[{"txt":"暴冰"},{"txt":"冰甲"},{"txt":"吃人"},{"txt":"死亡凋零"}]}, {"txt":"恐惧魔王","menu":[{"txt":"蝙蝠"},{"txt":"睡觉"},{"txt":"吸血光环"},{"txt":"黄色石头人"} ]}, {"txt":"小强王子"} ]} ] function $(Id){return document.getElementById(Id)}function addListener(element,e,fn){ element.addEventListener?element.addEventListener(e,fn,false):element.attachEvent("on" + e,fn)}; function initialize(){ var divs = $('All').getElementsByTagName('div'); for(var i = 0; i<divs.length;i++) { divs[i].innerHTML = menu[i].txt; (function(i){ addListener(divs[i],'mouseover',function(){makemenu(menu[i],divs[i],true)}); addListener(divs[i],'mouseout',function(event){remove(event,divs[i],true)}); })(i); }}function create(elm,parent,fn){ var element = document.createElement(elm); if(fn)fn(element) parent.appendChild(element);}function remove(e,elm,oo){ if(!oo)elm.className='list1'; e = e || event; var obj = e.relatedTarget||e.toElement; var index = 0; var exist =false; for(;index<stack.length;index++){ if(judge(stack[index],obj)){exist =true;break;} } if(!exist) { for(var i=0;i<stack.length;i++) {document.body.removeChild(stack[i])} stack=[]; } else { for(var i=index+1 ;i<stack.length;i++) { document.body.removeChild(stack[i]); } stack.length = index+1; }}function makemenu(data,obj,oo){ if(!oo){obj.className='list2'}; if(!data.menu) return; var Xy = position(obj); var scrap = document.createDocumentFragment(); for(var i = 0;i<data.menu.length;i++) { var pack = data.menu[i]; create('div',scrap,function(obj){ obj.className = 'list1'; obj.innerHTML = pack.menu?("→"+pack.txt):(" "+pack.txt); (function(pack){addListener(obj,'mouseover',function(){makemenu(pack,obj)})})(pack); addListener(obj,'mouseout',function(event){remove(event,obj)}) }); } create('div',document.body,function(obj){ obj.className ='div'; obj.style.left = (oo?Xy[0]:(Xy[0]+Xy[2])); obj.style.top = (oo?(Xy[1]+Xy[3]):Xy[1]); obj.appendChild(scrap) stack.push(obj); })}function position(elm){ var height = elm.offsetHeight; var width = elm.offsetWidth; var left =elm.offsetLeft; var top =elm.offsetTop; while(elm=elm.offsetParent){ left =left+ elm.offsetLeft; top =top+ elm.offsetTop; }; return [left,top,width,height]}function judge(parent,child){ if(parent == child) return true; while(child=child.parentNode){if(child==parent)return true;} return false;}initialize();</script></body> CSS改成这样,看是你要的不<style type="text/css">body,td,th {font-size: 12px;}.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}.div{width:150px; height:auto; position:absolute; cursor:pointer;}.list1{ height:auto; width:100%; padding:3px;border:1px solid #666666;background-color:#FFFFFF;color: #000000;position:relative;z-index:1;margin-top:-1px;}.list2{ height:auto; width:100%; padding:3px;border:1px solid #666666;border:none; background-color:#3b97d3; color: #FFFFFF;margin-left:-1px;}</style> IE6 下 测试没有发现Bug。 ....... to9楼:不是的前面发的把错误隐藏掉了,因为没有显示外部的边框 所以不会有问题会出现错误的代码如下 (快速移出可以 缓慢移出不行)<style type="text/css">body,td,th {font-size: 12px;}.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px;; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}.div{width:150px; height:auto; position:absolute; cursor:pointer;border:1px solid #666666; padding:3px; background-color:#FFFFFF}.list1{ height:auto; width:144; padding:3px;background-color:#FFFFFF;color: #000000}.list2{ height:auto; width:144; padding:3px;background-color:#3b97d3; color: #FFFFFF;}</style><body><br><br><br><div id='All'><div class="title"></div><div class="title"></div><div class="title"></div></div><script> var stack = new Array(); var menu = [ {"txt":"人族","menu":[{"txt":"大法师","menu":[{"txt":"水元素"},{"txt":"暴风雪"},{"txt":"辉煌光环"},{"txt":"瞬间移动"}]}, {"txt":"山丘之王","menu":[{"txt":"风暴之锤"},{"txt":"锥地"},{"txt":"锥晕"},{"txt":"天神下凡"}]}, {"txt":"圣骑士","menu":[{"txt":"光"},{"txt":"无敌"},{"txt":"光环"},{"txt":"复活"}]}, {"txt":"血法师","menu":[{"txt":"火焰"},{"txt":"吸蓝"},{"txt":"虚无"},{"txt":"神鸟凤凰"}]} ]}, {"txt":"兽族","menu":[{"txt":"贱圣","menu":[{"txt":"疾风步"},{"txt":"影分身"},{"txt":"致命一击"},{"txt":"剑刃风暴"}]}, {"txt":"先知男","menu":[{"txt":"狼"},{"txt":"日"},{"txt":"闪电链"},{"txt":"地震"}]}, {"txt":"牛头人酋长","menu":[{"txt":"冲击波"},{"txt":"阵地"},{"txt":"耐久光环"},{"txt":"复活"}]}, {"txt":"小YY","menu":[{"txt":"变动物"},{"txt":"治疗波"},{"txt":"小蛇棒子"},{"txt":"全体无敌"}]} ]}, {"txt":"不死族","menu":[ {"txt":"死亡骑士","menu":[{"txt":"大便"},{"txt":"光环"},{"txt":"吃人"},{"txt":"复尸体","menu":[ {"txt":"尸体"},{"txt":"40秒"},{"txt":"无敌"}] }]}, {"txt":"巫妖","menu":[{"txt":"暴冰"},{"txt":"冰甲"},{"txt":"吃人"},{"txt":"死亡凋零"}]}, {"txt":"恐惧魔王","menu":[{"txt":"蝙蝠"},{"txt":"睡觉"},{"txt":"吸血光环"},{"txt":"黄色石头人"} ]}, {"txt":"小强王子"} ]} ] function $(Id){return document.getElementById(Id)}function addListener(element,e,fn){ element.addEventListener?element.addEventListener(e,fn,false):element.attachEvent("on" + e,fn)}; function initialize(){ var divs = $('All').getElementsByTagName('div'); for(var i = 0; i<divs.length;i++) { divs[i].innerHTML = menu[i].txt; (function(i){ addListener(divs[i],'mouseover',function(){makemenu(menu[i],divs[i],true)}); addListener(divs[i],'mouseout',function(event){remove(event,divs[i],true)}); })(i); }}function create(elm,parent,fn){ var element = document.createElement(elm); if(fn)fn(element) parent.appendChild(element);}function remove(e,elm,oo){ //if(!oo)elm.className='list1'; e = e || event; var obj = e.relatedTarget||e.toElement; var index = 0; var exist =false; for(;index<stack.length;index++){ if(judge(stack[index],obj)){exist =true;break;} } if(!exist) { for(var i=0;i<stack.length;i++) {document.body.removeChild(stack[i])} stack=[]; } else { for(var i=index+1 ;i<stack.length;i++) { document.body.removeChild(stack[i]); } stack.length = index+1; }}function makemenu(data,obj,oo){ if(!oo){ for(var i=0;i<obj.parentNode.getElementsByTagName('div').length;i++) {obj.parentNode.getElementsByTagName('div')[i].className="list1"} obj.className="list2"; }; if(!data.menu) return; var Xy = position(obj); var scrap = document.createDocumentFragment(); for(var i = 0;i<data.menu.length;i++) { var pack = data.menu[i]; create('div',scrap,function(obj){ obj.className = 'list1'; obj.innerHTML = pack.menu?("→"+pack.txt):(" "+pack.txt); (function(pack){addListener(obj,'mouseover',function(){makemenu(pack,obj)})})(pack); addListener(obj,'mouseout',function(event){remove(event,obj)}) }); } create('div',document.body,function(obj){ obj.className ='div'; obj.style.left = (oo?Xy[0]:(Xy[0]+Xy[2]-3)); obj.style.top = (oo?(Xy[1]+Xy[3]):Xy[1]+1); obj.appendChild(scrap) stack.push(obj); })}function position(elm){ var height = elm.offsetHeight; var width = elm.offsetWidth; var left =elm.offsetLeft; var top =elm.offsetTop; while(elm=elm.offsetParent){ left =left+ elm.offsetLeft; top =top+ elm.offsetTop; }; return [left,top,width,height]}function judge(parent,child){ if(parent == child) return true; while(child=child.parentNode){if(child==parent)return true;} return false;}initialize();</script></body> document.dafaultView为空 求助:Extjs获取不到后台数据 求一个判断连续字符串的正则表达式 请教HTTP性能优化的问题 求通过鼠标拖动改变div的大小的代码~ 两个类库问题。 有没有办法让text控件的最后两个位置无效,留下位置实现有点类似下拉框右边的按钮 关于split问题 时间格式问题求教? 在客户端如何取到用'form.text'+i+'.value'字符串所表示的元素的值 如何在JavaScript中实现分页绑定 如何在confirm确定框中显示出时间
冒泡解决不了 外面的div加事件也解决不了 这是个人认为(如果1楼 2楼的觉得解决的了 我贴代码 在加100分..........)
className="praentX sonX";子层mouseout的时候,把父层的 className="praentX";
父层mouseout的时候,把 className="";
把.list1 ,list2 中的border:1px solid #666666;去掉 然后缓慢移出 ,就可以看到错误,原因就是我上面说的<style type="text/css">
body,td,th {font-size: 12px;}
.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px;; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}
.div{width:150px; height:auto; position:absolute; cursor:pointer;}
.list1{ height:auto; width:100%; padding:3px;border:1px solid #666666;background-color:#FFFFFF;color: #000000}
.list2{ height:auto; width:100%; padding:3px;border:1px solid #666666; background-color:#3b97d3; color: #FFFFFF;}
</style>
<body>
<div id='All'>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
</div>
<script> var stack = new Array();
var menu = [
{"txt":"人族","menu":[{"txt":"大法师","menu":[{"txt":"水元素"},{"txt":"暴风雪"},{"txt":"辉煌光环"},{"txt":"瞬间移动"}]},
{"txt":"山丘之王","menu":[{"txt":"风暴之锤"},{"txt":"锥地"},{"txt":"锥晕"},{"txt":"天神下凡"}]},
{"txt":"圣骑士","menu":[{"txt":"光"},{"txt":"无敌"},{"txt":"光环"},{"txt":"复活"}]},
{"txt":"血法师","menu":[{"txt":"火焰"},{"txt":"吸蓝"},{"txt":"虚无"},{"txt":"神鸟凤凰"}]} ]},
{"txt":"兽族","menu":[{"txt":"贱圣","menu":[{"txt":"疾风步"},{"txt":"影分身"},{"txt":"致命一击"},{"txt":"剑刃风暴"}]},
{"txt":"先知男","menu":[{"txt":"狼"},{"txt":"日"},{"txt":"闪电链"},{"txt":"地震"}]},
{"txt":"牛头人酋长","menu":[{"txt":"冲击波"},{"txt":"阵地"},{"txt":"耐久光环"},{"txt":"复活"}]},
{"txt":"小YY","menu":[{"txt":"变动物"},{"txt":"治疗波"},{"txt":"小蛇棒子"},{"txt":"全体无敌"}]}
]},
{"txt":"不死族","menu":[
{"txt":"死亡骑士","menu":[{"txt":"大便"},{"txt":"光环"},{"txt":"吃人"},{"txt":"复尸体","menu":[
{"txt":"尸体"},{"txt":"40秒"},{"txt":"无敌"}] }]},
{"txt":"巫妖","menu":[{"txt":"暴冰"},{"txt":"冰甲"},{"txt":"吃人"},{"txt":"死亡凋零"}]},
{"txt":"恐惧魔王","menu":[{"txt":"蝙蝠"},{"txt":"睡觉"},{"txt":"吸血光环"},{"txt":"黄色石头人"}
]},
{"txt":"小强王子"}
]}
]
function $(Id){return document.getElementById(Id)}
function addListener(element,e,fn){ element.addEventListener?element.addEventListener(e,fn,false):element.attachEvent("on" + e,fn)};
function initialize(){
var divs = $('All').getElementsByTagName('div');
for(var i = 0; i<divs.length;i++)
{
divs[i].innerHTML = menu[i].txt;
(function(i){
addListener(divs[i],'mouseover',function(){makemenu(menu[i],divs[i],true)});
addListener(divs[i],'mouseout',function(event){remove(event,divs[i],true)});
})(i);
}
}function create(elm,parent,fn){
var element = document.createElement(elm);
if(fn)fn(element)
parent.appendChild(element);
}function remove(e,elm,oo){
if(!oo)elm.className='list1';
e = e || event;
var obj = e.relatedTarget||e.toElement;
var index = 0;
var exist =false;
for(;index<stack.length;index++){
if(judge(stack[index],obj)){exist =true;break;}
} if(!exist)
{
for(var i=0;i<stack.length;i++)
{document.body.removeChild(stack[i])}
stack=[];
}
else
{
for(var i=index+1 ;i<stack.length;i++)
{
document.body.removeChild(stack[i]);
}
stack.length = index+1;
}
}function makemenu(data,obj,oo){
if(!oo){obj.className='list2'};
if(!data.menu) return;
var Xy = position(obj);
var scrap = document.createDocumentFragment();
for(var i = 0;i<data.menu.length;i++)
{
var pack = data.menu[i];
create('div',scrap,function(obj){
obj.className = 'list1';
obj.innerHTML = pack.menu?("→"+pack.txt):(" "+pack.txt);
(function(pack){addListener(obj,'mouseover',function(){makemenu(pack,obj)})})(pack);
addListener(obj,'mouseout',function(event){remove(event,obj)})
});
}
create('div',document.body,function(obj){
obj.className ='div';
obj.style.left = (oo?Xy[0]:(Xy[0]+Xy[2]));
obj.style.top = (oo?(Xy[1]+Xy[3]):Xy[1]);
obj.appendChild(scrap)
stack.push(obj);
})}function position(elm){
var height = elm.offsetHeight;
var width = elm.offsetWidth;
var left =elm.offsetLeft;
var top =elm.offsetTop;
while(elm=elm.offsetParent){
left =left+ elm.offsetLeft;
top =top+ elm.offsetTop;
};
return [left,top,width,height]
}function judge(parent,child){
if(parent == child) return true;
while(child=child.parentNode){if(child==parent)return true;}
return false;
}initialize();
</script>
</body>
body,td,th {font-size: 12px;}
.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}
.div{width:150px; height:auto; position:absolute; cursor:pointer;}
.list1{ height:auto; width:100%; padding:3px;border:1px solid #666666;background-color:#FFFFFF;color: #000000;position:relative;z-index:1;margin-top:-1px;}
.list2{ height:auto; width:100%; padding:3px;border:1px solid #666666;border:none; background-color:#3b97d3; color: #FFFFFF;margin-left:-1px;}
</style>
前面发的把错误隐藏掉了,因为没有显示外部的边框 所以不会有问题
会出现错误的代码如下 (快速移出可以 缓慢移出不行)<style type="text/css">
body,td,th {font-size: 12px;}
.title{ height:20px; width:100px; background-color:#0099FF; border:1px solid #666666; margin:3px;; position:relative; float:left; text-align:center; vertical-align:middle; line-height:20px;}
.div{width:150px; height:auto; position:absolute; cursor:pointer;border:1px solid #666666; padding:3px; background-color:#FFFFFF}
.list1{ height:auto; width:144; padding:3px;background-color:#FFFFFF;color: #000000}
.list2{ height:auto; width:144; padding:3px;background-color:#3b97d3; color: #FFFFFF;}
</style>
<body><br><br><br>
<div id='All'>
<div class="title"></div>
<div class="title"></div>
<div class="title"></div>
</div>
<script> var stack = new Array();
var menu = [
{"txt":"人族","menu":[{"txt":"大法师","menu":[{"txt":"水元素"},{"txt":"暴风雪"},{"txt":"辉煌光环"},{"txt":"瞬间移动"}]},
{"txt":"山丘之王","menu":[{"txt":"风暴之锤"},{"txt":"锥地"},{"txt":"锥晕"},{"txt":"天神下凡"}]},
{"txt":"圣骑士","menu":[{"txt":"光"},{"txt":"无敌"},{"txt":"光环"},{"txt":"复活"}]},
{"txt":"血法师","menu":[{"txt":"火焰"},{"txt":"吸蓝"},{"txt":"虚无"},{"txt":"神鸟凤凰"}]} ]},
{"txt":"兽族","menu":[{"txt":"贱圣","menu":[{"txt":"疾风步"},{"txt":"影分身"},{"txt":"致命一击"},{"txt":"剑刃风暴"}]},
{"txt":"先知男","menu":[{"txt":"狼"},{"txt":"日"},{"txt":"闪电链"},{"txt":"地震"}]},
{"txt":"牛头人酋长","menu":[{"txt":"冲击波"},{"txt":"阵地"},{"txt":"耐久光环"},{"txt":"复活"}]},
{"txt":"小YY","menu":[{"txt":"变动物"},{"txt":"治疗波"},{"txt":"小蛇棒子"},{"txt":"全体无敌"}]}
]},
{"txt":"不死族","menu":[
{"txt":"死亡骑士","menu":[{"txt":"大便"},{"txt":"光环"},{"txt":"吃人"},{"txt":"复尸体","menu":[
{"txt":"尸体"},{"txt":"40秒"},{"txt":"无敌"}] }]},
{"txt":"巫妖","menu":[{"txt":"暴冰"},{"txt":"冰甲"},{"txt":"吃人"},{"txt":"死亡凋零"}]},
{"txt":"恐惧魔王","menu":[{"txt":"蝙蝠"},{"txt":"睡觉"},{"txt":"吸血光环"},{"txt":"黄色石头人"}
]},
{"txt":"小强王子"}
]}
]
function $(Id){return document.getElementById(Id)}
function addListener(element,e,fn){ element.addEventListener?element.addEventListener(e,fn,false):element.attachEvent("on" + e,fn)};
function initialize(){
var divs = $('All').getElementsByTagName('div');
for(var i = 0; i<divs.length;i++)
{
divs[i].innerHTML = menu[i].txt;
(function(i){
addListener(divs[i],'mouseover',function(){makemenu(menu[i],divs[i],true)});
addListener(divs[i],'mouseout',function(event){remove(event,divs[i],true)});
})(i);
}
}function create(elm,parent,fn){
var element = document.createElement(elm);
if(fn)fn(element)
parent.appendChild(element);
}function remove(e,elm,oo){
//if(!oo)elm.className='list1';
e = e || event;
var obj = e.relatedTarget||e.toElement;
var index = 0;
var exist =false;
for(;index<stack.length;index++){
if(judge(stack[index],obj)){exist =true;break;}
} if(!exist)
{
for(var i=0;i<stack.length;i++)
{document.body.removeChild(stack[i])}
stack=[];
}
else
{
for(var i=index+1 ;i<stack.length;i++)
{
document.body.removeChild(stack[i]);
}
stack.length = index+1;
}
}function makemenu(data,obj,oo){
if(!oo){
for(var i=0;i<obj.parentNode.getElementsByTagName('div').length;i++)
{obj.parentNode.getElementsByTagName('div')[i].className="list1"}
obj.className="list2";
};
if(!data.menu) return;
var Xy = position(obj);
var scrap = document.createDocumentFragment();
for(var i = 0;i<data.menu.length;i++)
{
var pack = data.menu[i];
create('div',scrap,function(obj){
obj.className = 'list1';
obj.innerHTML = pack.menu?("→"+pack.txt):(" "+pack.txt);
(function(pack){addListener(obj,'mouseover',function(){makemenu(pack,obj)})})(pack);
addListener(obj,'mouseout',function(event){remove(event,obj)})
});
}
create('div',document.body,function(obj){
obj.className ='div';
obj.style.left = (oo?Xy[0]:(Xy[0]+Xy[2]-3));
obj.style.top = (oo?(Xy[1]+Xy[3]):Xy[1]+1);
obj.appendChild(scrap)
stack.push(obj);
})}function position(elm){
var height = elm.offsetHeight;
var width = elm.offsetWidth;
var left =elm.offsetLeft;
var top =elm.offsetTop;
while(elm=elm.offsetParent){
left =left+ elm.offsetLeft;
top =top+ elm.offsetTop;
};
return [left,top,width,height]
}function judge(parent,child){
if(parent == child) return true;
while(child=child.parentNode){if(child==parent)return true;}
return false;
}initialize();
</script>
</body>