鼠标移出这个层的时候,就触发onMouseOut事件,将层隐藏掉。 [code=JScript]
function Show_TabNav(a,b){
for(var i=0;i<2;i++){document.getElementById("tabadcontent_"+a+i).style.display="none";}
for(var i=0;i<2;i++){document.getElementById("tabadmenu_"+a+i).className="";}
document.getElementById("tabadmenu_"+a+b).className="tabchange";
document.getElementById("tabadcontent_"+a+b).style.display="block";
}function hid_TabNav(a,b){
document.getElementById("tabadcontent_"+a+b).style.display="none";
}
<ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onMouseOver="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0)">切换1</li>
<li id="tabadmenu_21" onMouseOver="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1)>切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display:none">
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display:none">
<dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
[/code]以上是我写的切换过程,想要表达的意思就是当鼠标移动到“切换1”显示“商品分类1”,移动到“切换2”显示“商品分类2”,以上已经实现,但是当鼠标移开“商品分类”两个层后,这两个层要自动隐藏,目前达不到这种效果,为什么?如何解决啊?本来是js新手,不懂请高手指点,本人很急,请大家帮忙
function Show_TabNav(a,b){
for(var i=0;i<2;i++){document.getElementById("tabadcontent_"+a+i).style.display="none";}
for(var i=0;i<2;i++){document.getElementById("tabadmenu_"+a+i).className="";}
document.getElementById("tabadmenu_"+a+b).className="tabchange";
document.getElementById("tabadcontent_"+a+b).style.display="block";
}function hid_TabNav(a,b){
document.getElementById("tabadcontent_"+a+b).style.display="none";
}
<ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onMouseOver="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0)">切换1</li>
<li id="tabadmenu_21" onMouseOver="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1)>切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display:none">
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display:none">
<dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
[/code]以上是我写的切换过程,想要表达的意思就是当鼠标移动到“切换1”显示“商品分类1”,移动到“切换2”显示“商品分类2”,以上已经实现,但是当鼠标移开“商品分类”两个层后,这两个层要自动隐藏,目前达不到这种效果,为什么?如何解决啊?本来是js新手,不懂请高手指点,本人很急,请大家帮忙
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
我迷迷糊糊懂了,但是我的js是初学的,还有高手帮忙看看啊javascript onmouseout 解决办法
解决onMouseOut违背逻辑的办法
<li id="tabadmenu_21" onMouseOver='Show_TabNav("2","1")' onmouseout='hid_TabNav("2","1")'>切换2</li>
注意单引号for(var i=0;i<2;i++){document.getElementById("tabadcontent_"+a+i).style.display="none";}
for(var i=0;i<2;i++)
{
document.getElementById("tabadmenu_"+a+i).className="";
alert(("tabadmenu_"+a+i);//增加这个语句,就知道原因了吧!
}
...
"tabadmenu_"+1+0和"tabadmenu_"+"1"+"0"的区别哦
这是个很巧妙的的方法,因为当onmouseout触发后,实质性的方法并没有马上执行,而是要等待一小段时间。如果在这段时间里马上又触发了 onmouseover事件,那么基本上就可以肯定onmouseout事件的触发是因为内部元素的干扰了,所以在onmouseover事件中使用 clearTimeout来阻止延时的方法执行。二.contains在onmouseover时先进行如下判断,结果为true时再执行方法体:
var s = e.fromElement || e.relatedTarget ;
if(!this.contains(s)){MouseOverFunc()}在onmouseout时先进行如下判断,结果为true时再执行方法体:
var s = e.toElement || e.relatedTarget ;
if(!this.contains(s)){MouseOutFunc()}
下面来解释一下上面两行代码的含义:在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。event.fromElement指向触发onmouseover和onmouseout事件时鼠标离开的元素;event.toElement指向触发onmouseover和onmouseout事件时鼠标进入的元素。那么上面两行代码的含义就分别是:○ 当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;○ 当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;这样,内部元素就不会干扰外层元素的onmouseover和onmouseout事件了。但问题又来了,非IE的浏览器并不支持contains函数,不过既然我们已经知道了contains函数的作用,就可以自行添加如下的代码来为非IE浏览器增加contains支持:if(typeof(HTMLElement) != "undefined"){HTMLElement.prototype.contains = function(obj){ while(obj != null && typeof(obj.tagName) != "undefined") {if(obj == this)return true;obj = obj.parentNode;} return false; }; }
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> new document </title>
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<script type="text/javascript">
<!--
function Show_TabNav(a,b){
for(var i=0;i<2;i++){document.getElementById("tabadcontent_"+a+i).style.display="none";}
for(var i=0;i<2;i++){document.getElementById("tabadmenu_"+a+i).className="";}
document.getElementById("tabadmenu_"+a+b).className="tabchange";
document.getElementById("tabadcontent_"+a+b).style.display="block";
}function hid_TabNav(a,b){
document.getElementById("tabadcontent_"+a+b).style.display="none";
}//-->
</script>
<style type="text/css">
.I_TOP_LEFT_N_ul li{float:left; }
</style>
<body>
<ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onMouseOver="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0)">切换1</li>
<li id="tabadmenu_21" onMouseOver="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1)">切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display:none" onMouseOver="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0)">
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display:none" onMouseOver="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1)">
<dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
</body>
</html>
function Show_TabNav(a, b) {
for (var i = 0; i < 2; i++) { document.getElementById("tabadcontent_" + a + i).style.display = "none"; }
for (var i = 0; i < 2; i++) { document.getElementById("tabadmenu_" + a + i).className = ""; }
document.getElementById("tabadmenu_" + a + b).className = "tabchange";
document.getElementById("tabadcontent_" + a + b).style.display = "block";
} function hid_TabNav(a, b) {
document.getElementById("tabadcontent_" + a + b).style.display = "none";
} </script> <ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onMouseOver="Show_TabNav(2,0)" onmouseout="timer1=setTimeout(function(){hid_TabNav(2,0)},200)">切换1</li>
<li id="tabadmenu_21" onMouseOver="Show_TabNav(2,1)" onmouseout="timer2=setTimeout(function(){hid_TabNav(2,1)},200)">切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display:none" onmouseout="hid_TabNav(2,0)" onmouseover="clearTimeout(timer1)">
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display:none" onmouseout="hid_TabNav(2,1)" onmouseover="clearTimeout(timer2)">
<dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl>
</div>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title> new document </title>
<meta name="keywords" content="">
<meta name="description" content="">
</head><style type="text/css">
.I_TOP_LEFT_CONT { width:500px;height:300px;border:1px solid red;}
.I_TOP_LEFT_N_ul {width:500px;border:1px solid red;list-type:none;padding:0px; height:25px; }
.I_TOP_LEFT_N_ul li{float:left; margin-left:30px;height:25px; }
.tabchange{color:red;}
</style>
<body>
<ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onmouseover="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0,event,this)">切换1</li>
<li id="tabadmenu_21" onmouseover="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1,event,this)">切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display:none" onmouseover="Show_TabNav(2,0)" onmouseout="hid_TabNav(2,0,event,this)" >
<dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利1</a> </dd>
</dl>
</div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display:none" onmouseover="Show_TabNav(2,1)" onmouseout="hid_TabNav(2,1,event,this)">
<dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利2</a> </dd>
</dl>
</div>
</body>
<script type="text/javascript"> if(typeof(HTMLElement)!="undefined")
{
HTMLElement.prototype.contains=function(obj){
while(obj!=null && typeof(obj.tabName)!="undefined"){
if(obj==this) return true;
obj=obj.parentNode;
}
return false;
};
}
function Show_TabNav(tabName,tabIndex){
if(timer!=null) {clearTimeout(timer); timer=null;}
for(var i=0;i<2;i++){
document.getElementById("tabadcontent_"+tabName+i).style.display = (tabIndex==i?"block": "none");
document.getElementById("tabadmenu_"+tabName+i).className= (tabIndex==i?"tabchange":"");
}
}function hid_TabNav(tabName,tabIndex,e,obj)
{
e = e||event;
e = e.toElement || e.relatedTarget ; // IE toElement FF:relatedTarget
if(typeof(e)!="undefined" &&!obj.contains(e)){
timer = setTimeout(function(){
document.getElementById("tabadcontent_"+tabName+tabIndex).style.display="none";
},500);
}
}var timer=null;</script>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function Show_TabNav(a,b){
for(var i=0;i<2;i++){document.getElementById("tabadcontent_"+a+i).style.display="none";}
for(var i=0;i<2;i++){document.getElementById("tabadmenu_"+a+i).className="";}
document.getElementById("tabadmenu_"+a+b).className="tabchange";
document.getElementById("tabadcontent_"+a+b).style.display="block";
}function hid_TabNav(){ for (var i = 0; i < 2; i++) {
document.getElementById("tabadcontent_2" + i).style.display = "none";
}
for (var i = 0; i < 2; i++) {
document.getElementById("tabadmenu_2" + i).className = "";
}
}var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
function doMouseOut(e, father) {
var event = e || window.event;
var parent = isIE ? event.toElement : event.relatedTarget;
while ( parent && parent !== father ) {
parent = parent.parentNode;
}
if ( parent !== father ) {
hid_TabNav();
}
}</script>
<style type="text/css">
.I_TOP_LEFT_CONT {
width: 500px;
height: 300px;
border: 1px solid red;
}.I_TOP_LEFT_N_ul {
margin:0px;
border: 1px solid red;
list-type: none;
padding: 0px;
height: 25px;
}.I_TOP_LEFT_N_ul li {
float: left;
margin-left: 30px;
height: 25px;
}.tabchange {
color: red;
}
.container {
border: 1px solid red;
width: 500px;
}
</style>
</head>
<body>
<div id="container" onmouseout="doMouseOut(event, this);" class="container">
<ul class="I_TOP_LEFT_N_ul">
<li id="tabadmenu_20" onMouseOver="Show_TabNav(2,0)">切换1</li>
<li id="tabadmenu_21" onMouseOver="Show_TabNav(2,1)">切换2</li>
</ul>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_20" style="display: none"> <dl>
<dt>商品分类1</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl> </div>
<div class="I_TOP_LEFT_CONT" id="tabadcontent_21" style="display: none"> <dl>
<dt>商品分类2</dt>
<dd><a href="#" target="_blank">伊利</a> </dd>
</dl> </div></div>
</body>
</html>
有google的水平还会很差啊!晕倒!哈哈!