1. if(e.id!=aname) //这里的e.id是指什么啊?
2.   是先执行inDaohang函数还是先执行closeDaohang函数啊?
3. obj.parentNode  //是指哪个的父元素啊?
4. if(!inDaohang(divname,e)){   //这里的意思是不是说."如果没有inDaohang函数".我是这样理解的.不知道对不对?
5.  var f = false; //这一句是不是没作用的?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function aa(divname,num){
var a = document.getElementsByName(divname);
for(var i=0;i<a.length;i++){
if(i==num){
a[i].style.display='block';
}else{
a[i].style.display='none';
}
}
}
function inDaohang(divname,obj){
var f = false;
while(obj.parentNode){
if(obj.name==divname){
return true;
}
obj = obj.parentNode;
}
return false;
}
function closeDaohang(e,divname,aname){
if(e.id!=aname)
if(!inDaohang(divname,e)){
var a = document.getElementsByName(divname);
for(var i=0;i<a.length;i++){
a[i].style.display='none';
}
}
}
//-->
</SCRIPT>
<style>
/* 渐变弹出层 */
body{font-size:9pt;}
#race{width:200px;height:50px;line-height:50px;text-align:center;background:#CCC;border:#555 1px solid;}
.raceShow{background-color:#f1f1f1;border:solid 1px #ccc;position:absolute;display:none;width:300px;height:100px;padding:5px;font-size:12px;}
#UpLayer span{border:#fff 1px solid; width:80px; padding:0 5px; line-height:20px; display:block;}
#UpLayer ul{display:none;position:absolute;border:#ccc 1px solid;width:80px; padding:5px; line-height:20px; background:#f1f1f1; margin:-1px 0 0 0;}
#UpLayer ul li{ border-bottom:#ccc 1px dashed;}
</style>
</HEAD>
<BODY onclick="closeDaohang(event.srcElement||event.target,'racePop','bb')">
<!-- 渐变弹出层 -->
<div id="race"><a id="bb" href="javascript:;" onclick="aa('racePop',0)">点击</a></div>
<div id="racePop" name="racePop" class="raceShow">这里是弹出层效果</div>
<div id="UpLayer">
<span><a href="javascript:void(0)">弹出层</a></span>
    <ul>
        <li><a href="#">手机资讯</a></li>
        <li><a href="#">热门文章</a></li>
        <li><a href="#">联系站长</a></li>
        <li><a href="#">建议意见</a></li>
    </ul>
</div>
</BODY>
</HTML>

解决方案 »

  1.   

    1. if(e.id!=aname) //这里的e.id是指什么啊?
    2. 是先执行inDaohang函数还是先执行closeDaohang函数啊?
    3. obj.parentNode //是指哪个的父元素啊?
    4. if(!inDaohang(divname,e)){ //这里的意思是不是说."如果没有inDaohang函数".我是这样理解的.不知道对不对?
    5. var f = false; //这一句是不是没作用的?
    回答:
    1)e.id为触发事件的标签的id
    2)先执行inDaohang,不然还没打开,你就先closeDaohang关闭掉有什么意义呢?
    3)你调用函数inDaohang的时候,传递的参数是哪个标签,obj.parentNode就是指哪个标签的父元素
    4)不是如果没有函数,是如果执行该函数,返回的是false时
    5)这句你可以删掉了,这个变量定义之后,没有再调用
      

  2.   

    3. obj.parentNode //是指哪个的父元素啊?   //这里是指的是这个event.srcElement||event.target  的父元素是哪个啊?是html吗?
    e.id为触发事件的标签的id  //是不是这个窗口下的全部有ID属性的div
      

  3.   


    obj.parentNode //是指哪个的父元素啊? event.srcElement||event.target 指的是触发事件元素的上一级元素,如果你在race(即id = race的div为event.srcElement||event.target)中点的话,那么触发事件元素的上一级元素就是body,如果是在bb中点击的话,那么就是racee.id为触发事件的标签的ide是之函数接收过来的事件,e.id 等同于 event.srcElement.id||event.target.id好好看看js的event的基础知识再来分析吧,这些都是基础概念,不要还没有走,就想着跑