也就是 我点击其他空白处 能够关闭当前正在显示的层,可以用 jquery

解决方案 »

  1.   

    通过onclick事件来关闭,判断onclick事件是由哪个标签触发的
      

  2.   

    document.onclick 吗?这样不行啊,因为我div是一个树 这样点击树的时候没法判断
      

  3.   

    你大概是要实现这样的效果吧:当鼠标点击在这div上的时候,不隐藏(关闭)div,当鼠标点击在div外面的时候就隐藏div。首先添加鼠标onclick事件的监听,在页面body 的onload事件中添加addListen()
    function addListen(){
    if(window.event){//ie
        document.attachEvent("onclick",mClick);
        }
        else{
            document.addEventListener("click",mClick,false);
        }
    }假设这个div的id是“testDiv”,添加响应监听事件的方法mClick()
    function mClick(evt){
        var thisdiv = document.getElementById('testDiv');
        if(thisdiv){
            var element=null;
            if(window.event){//ie
                element=window.event.srcElement;
            }else{
                element=evt.originalTarget;
            }
            while(element.tagName!='BODY'){
                if(element.id=='testDiv'){                   
                    return;//点击在div上就返回
                }
                element=element.parentElement||element.parentNode;
            }
            thisdiv.style.display='none';//关闭div
        }
    }
    其中关键代码是while语句
      

  4.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
    <title></title>  
    <style>  
    html,body{font-size:12px;margin:0px;height:100%;}  
    .mesWindow{border:#666 1px solid;background:#fff;}  
    .mesWindowTop{border-bottom:#eee 1px solid;margin-left:4px;padding:3px;font-weight:bold;text-align:left;font-size:12px;}  
    .mesWindowContent{margin:4px;font-size:12px;}  
    .mesWindow .close{height:15px;width:28px;border:none;cursor:pointer;text-decoration:underline;background:#fff}  
    </style>  
    <script>  
    var isIe=(document.all)?true:false;  
    //设置select的可见状态  
    function setSelectState(state)  
    {  
     var objl=document.getElementsByTagName('select');  
     for(var i=0;i<objl.length;i++)  
     {  
     objl[i].style.visibility=state;  
     }  
    }  
    function mousePosition(ev)  
     {  
     if(ev.pageX || ev.pageY)  
     {  
     return {x:ev.pageX, y:ev.pageY};  
     }  
     return {  
     x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,y:ev.clientY + document.body.scrollTop - document.body.clientTop  
     };  
     }  
    //弹出方法  
    function showMessageBox(wTitle,content,pos,wWidth)  
    {  
     closeWindow();  
     var bWidth=parseInt(document.documentElement.scrollWidth);  
     var bHeight=parseInt(document.documentElement.scrollHeight);
     var obj = document.getElementById("t1")
     var textboxHeight = obj.offsetTop + obj.offsetHeight;
     var textboxWidth = obj.offsetLeft;
     //if(isIe){  
     //setSelectState('hidden');}  
     //var back=document.createElement("div");  
     //back.id="back";  
     //var styleStr="top:0px;left:0px;position:absolute;background:#666;width:"+bWidth+"px;height:"+bHeight+"px;";  
     //styleStr+=(isIe)?"filter:alpha(opacity=40);":"opacity:0.40;";  
     //back.style.cssText=styleStr;  
     //document.body.appendChild(back);  
     var mesW=document.createElement("div");  
     mesW.id="mesWindow";  
     mesW.className="mesWindow";  
     mesW.innerHTML="<div class='mesWindowTop'><table width='100%' height='100%'><tr><td>"+wTitle+"</td><td style='width:1px;'><input type='button' onclick='closeWindow();' title='关闭窗口' class='close' value='关闭' /></td></tr></table></div><div class='mesWindowContent' id='mesWindowContent'>"+content+"</div><div class='mesWindowBottom'></div>";  
     styleStr="left:"+textboxWidth+"px;top:"+textboxHeight+"px;position:absolute;width:"+wWidth+"px;";   
     //styleStr="left:"+(((pos.x-wWidth)>0)?(pos.x-wWidth):pos.x)+"px;top:"+(pos.y)+"px;position:absolute;width:"+wWidth+"px;";  
     mesW.style.cssText=styleStr;  
     document.body.appendChild(mesW);  
    }  
     function showBackground(obj,endInt)  
    {  
     obj.filters.alpha.opacity+=1;  
     if(obj.filters.alpha.opacity<endInt)  
     {  
     setTimeout(function(){showBackground(obj,endInt)},8);  
     }  
    }  
    //关闭窗口  
    function closeWindow()  
    {  
     if(document.getElementById('back')!=null)  
     {  
     document.getElementById('back').parentNode.removeChild(document.getElementById('back'));  
     }  
     if(document.getElementById('mesWindow')!=null)  
     {  
     document.getElementById('mesWindow').parentNode.removeChild(document.getElementById('mesWindow'));  
     }  
      
     //if(isIe){  
     //setSelectState('');}  
    }  
    //测试弹出  
    function testMessageBox(ev)  
    {  
     var objPos = mousePosition(ev);  
     messContent="<div style='padding:20px 0 20px 0;text-align:center'>消息正文</div>";  
     showMessageBox('窗口标题',messContent,objPos,350);  
    }  
    </script>  
    </head>  
    <body>  
    <input type="text" id="t1" onClick="testMessageBox(event);"></body>  
    </html>  
      

  5.   

    element=window.event.srcElement 如果点击是 DIV 层里的某某<a> 这个就不行了。
    window.event.srcElement 获取的就是这个 <a> 或者别的。
    这个方法好像只有一个 DIV 是可以的
      

  6.   

    谢谢 Cyril_Tam  我现在是想 点击别的地方能自动关闭这个层
      

  7.   

    <input type="text" id="t1" onClick="testMessageBox(event);" onblur="closeWindow()">
    失去焦点的时候关闭
      

  8.   

    要么你把csdn右侧菜单的代码拿来瞧瞧就好了么
    基本上就一循环,然后判断某个标签是否需要打开或者关闭
      

  9.   

    续6楼。这怎么错了呢?
    借7楼代码一用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
    <title></title>  
    <style>  
    html,body{font-size:12px;margin:0px;height:100%;}  
    .mesWindow{border:#666 1px solid;background:#fff;}  
    .mesWindowTop{border-bottom:#eee 1px solid;margin-left:4px;padding:3px;font-weight:bold;text-align:left;font-size:12px;}  
    .mesWindowContent{margin:4px;font-size:12px;}  
    .mesWindow .close{height:15px;width:28px;border:none;cursor:pointer;text-decoration:underline;background:#fff}  
    </style>  
    <script>  
    var isIe=(document.all)?true:false;  
    //设置select的可见状态  
    function setSelectState(state)  
    {  
     var objl=document.getElementsByTagName('select');  
     for(var i=0;i<objl.length;i++)  
     {  
     objl[i].style.visibility=state;  
     }  
    }  
    function mousePosition(ev)  
     {  
     if(ev.pageX || ev.pageY)  
     {  
     return {x:ev.pageX, y:ev.pageY};  
     }  
     return {  
     x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,y:ev.clientY + document.body.scrollTop - document.body.clientTop  
     };  
     }  
    //弹出方法  
    function showMessageBox(wTitle,content,pos,wWidth)  
    {  
     closeWindow();  
     var bWidth=parseInt(document.documentElement.scrollWidth);  
     var bHeight=parseInt(document.documentElement.scrollHeight);
     var obj = document.getElementById("t1")
     var textboxHeight = obj.offsetTop + obj.offsetHeight;
     var textboxWidth = obj.offsetLeft;
     //if(isIe){  
     //setSelectState('hidden');}  
     //var back=document.createElement("div");  
     //back.id="back";  
     //var styleStr="top:0px;left:0px;position:absolute;background:#666;width:"+bWidth+"px;height:"+bHeight+"px;";  
     //styleStr+=(isIe)?"filter:alpha(opacity=40);":"opacity:0.40;";  
     //back.style.cssText=styleStr;  
     //document.body.appendChild(back);  
     var mesW=document.createElement("div");  
     mesW.id="mesWindow";  
     mesW.className="mesWindow";  
     mesW.innerHTML="<div class='mesWindowTop'><table width='100%' height='100%'><tr><td>"+wTitle+"</td><td style='width:1px;'><input type='button' onclick='closeWindow();' title='关闭窗口' class='close' value='关闭' /></td></tr></table></div><div class='mesWindowContent' id='mesWindowContent'>"+content+"</div><div class='mesWindowBottom'></div>";  
     styleStr="left:"+textboxWidth+"px;top:"+textboxHeight+"px;position:absolute;width:"+wWidth+"px;";   
     //styleStr="left:"+(((pos.x-wWidth)>0)?(pos.x-wWidth):pos.x)+"px;top:"+(pos.y)+"px;position:absolute;width:"+wWidth+"px;";  
     mesW.style.cssText=styleStr;  
     document.body.appendChild(mesW);  
    }  
     function showBackground(obj,endInt)  
    {  
     obj.filters.alpha.opacity+=1;  
     if(obj.filters.alpha.opacity<endInt)  
     {  
     setTimeout(function(){showBackground(obj,endInt)},8);  
     }  
    }  
    //关闭窗口  
    function closeWindow()  
    {  
     if(document.getElementById('back')!=null)  
     {  
     document.getElementById('back').parentNode.removeChild(document.getElementById('back'));  
     }  
     if(document.getElementById('mesWindow')!=null)  
     {  
     document.getElementById('mesWindow').parentNode.removeChild(document.getElementById('mesWindow'));  
     }  
      
     //if(isIe){  
     //setSelectState('');}  
    }  
    //测试弹出  
    function testMessageBox(ev)  
    {  
     var objPos = mousePosition(ev);  
     messContent="<div style='padding:20px 0 20px 0;text-align:center'>消息正文</div>";  
     showMessageBox('窗口标题',messContent,objPos,350);  
    }  function addListen(){ 
    if(window.event){//ie 
        document.attachEvent("onclick",mClick); 
        } 
        else{ 
            document.addEventListener("click",mClick,false); 
        } 

    function mClick(evt){ 
        var thisdiv = document.getElementById('mesWindow'); 
        if(thisdiv&&thisdiv.style.display!='none'){ 
            var element=null; 
            if(window.event){//ie 
                element=window.event.srcElement; 
            }else{ 
                element=evt.originalTarget; 
            } 
            while(element.tagName!='BODY'){ 
                if(element.id=='mesWindow'||element.id=='t1'){                  
                    return;//点击在div上就返回 
                } 
                element=element.parentElement||element.parentNode; 
            } 
            thisdiv.style.display='none';//关闭div 
        } 
    }
     </script>  
    </head>  
    <body onload="addListen()">  
    <input type="text" id="t1" onClick="testMessageBox(event);"></body>  
    </html>  
      

  10.   


    谢谢 weddorn 
    这样可以满足一个 我要做的是个公用的控件,也就是说不知道在页面里有几个这样的弹出层的能容也是不一样的
    如果我有多个?
    <input type="text" id="t1" onClick="testMessageBox(event,'dd');">
    <input type="text" id="t2" onClick="testMessageBox(event,'dd');">while(element.tagName!='BODY'){ 
       if(element.id=='mesWindow'||element.id=='t1'){                  
            return;//点击在div上就返回 
        } 
    这里怎么判断有多个呢? 主要就是多个
      

  11.   

    用了 jquery function mClick(evt){ 
             
            var div =$(".LayerDiv:visible").attr("id")
            var thisdiv = document.getElementById(div); 
            if(thisdiv&&thisdiv.style.display!='none'){ 
                var element=null; 
                if(window.event){//ie 
                    element=window.event.srcElement; 
                }
                else{ 
                    element=evt.originalTarget; 
                } 
                while(element.tagName!='BODY'){ 
                    var input=$("#"+element.id).size();
                    //if(element.id==div || element.id=='ss')
                    if(input>0)
                    {                  
                        return;//点击在div上就返回 
                    } 
                    element=element.parentElement||element.parentNode; 
                } 
                thisdiv.style.display='none';//关闭div 
            } 
        }