麻烦帮我看下下面的下拉项代码,我点击打开菜单后,鼠标点击别的地方,怎么样让打开的菜单项自动收缩起来呢,谢谢<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
body,htmy{ margin:0; padding:0;}
div,ul,li{margin:0; padding:0;}
ul,li{list-style:none;}
#macstyle .select_box{height:22px;  width:113px;}
#macstyle div.tag_select{display:block;color:#fff; text-align:left; padding-left:10px;width:113px;height:150px;background:url(http://img.bbs.csdn.net/upload/201309/05/1378377493_953497.gif) no-repeat;line-height:22px;}
#macstyle div.tag_select_hover{display:block;color:#fff;text-align:left; padding-left:10px;width:113px;height:22px;background:url(http://img.bbs.csdn.net/upload/201309/05/1378377493_953497.gif) no-repeat;line-height:22px;}
#macstyle div.tag_select_open{display:block;color:#fff;text-align:left; padding-left:10px;width:113px;height:22px;background:url(http://img.bbs.csdn.net/upload/201309/05/1378377493_953497.gif) no-repeat;line-height:22px;}
#macstyle ul.tag_options{position:absolute;list-style:none;text-align:left; }
#macstyle ul.tag_options li{ background:#414348;display:block;text-align:left; padding-left:10px;width:103px;height:30px;text-decoration:none;line-height:30px;color:#fff;}
#macstyle ul.tag_options li.open_hover{color:#fff; background:#6c6f75;}
#macstyle ul.tag_options li.open_selected{color:#fff;}
</style>
<script>
var selects = document.getElementsByTagName('select');var isIE = (document.all && window.ActiveXObject && !window.opera) ? true : false;function $(id) {
return document.getElementById(id);
}function stopBubbling (ev) {
ev.stopPropagation();
}function rSelects() {
for (i=0;i<selects.length;i++){
selects[i].style.display = 'none';
select_tag = document.createElement('div');
select_tag.id = 'select_' + selects[i].name;
select_tag.className = 'select_box';
selects[i].parentNode.insertBefore(select_tag,selects[i]); select_info = document.createElement('div');
select_info.id = 'select_info_' + selects[i].name;
select_info.className='tag_select';
select_info.style.cursor='pointer';
select_tag.appendChild(select_info); select_ul = document.createElement('ul');
select_ul.id = 'options_' + selects[i].name;
select_ul.className = 'tag_options';
select_ul.style.position='absolute';
select_ul.style.display='none';
select_ul.style.zIndex='999';
select_tag.appendChild(select_ul); rOptions(i,selects[i].name);

mouseSelects(selects[i].name); if (isIE){
selects[i].onclick = new Function("clickLabels3('"+selects[i].name+"');window.event.cancelBubble = true;");
}
else if(!isIE){
selects[i].onclick = new Function("clickLabels3('"+selects[i].name+"')");
selects[i].addEventListener("click", stopBubbling, false);
}
}
}
function rOptions(i, name) {
var options = selects[i].getElementsByTagName('option');
var options_ul = 'options_' + name;
for (n=0;n<selects[i].options.length;n++){
option_li = document.createElement('li');
option_li.style.cursor='pointer';
option_li.className='open';
$(options_ul).appendChild(option_li); option_text = document.createTextNode(selects[i].options[n].text);
option_li.appendChild(option_text); option_selected = selects[i].options[n].selected; if(option_selected){
option_li.className='open_selected';
option_li.id='selected_' + name;
$('select_info_' + name).appendChild(document.createTextNode(option_li.innerHTML));
}

option_li.onmouseover = function(){ this.className='open_hover';}
option_li.onmouseout = function(){
if(this.id=='selected_' + name){
this.className='open_selected';
}
else {
this.className='open';
}


option_li.onclick = new Function("clickOptions("+i+","+n+",'"+selects[i].name+"')");
}
}function mouseSelects(name){
var sincn = 'select_info_' + name; $(sincn).onmouseover = function(){ if(this.className=='tag_select') this.className='tag_select_hover'; }
$(sincn).onmouseout = function(){ if(this.className=='tag_select_hover') this.className='tag_select'; } if (isIE){
$(sincn).onclick = new Function("clickSelects('"+name+"');window.event.cancelBubble = true;");
}
else if(!isIE){
$(sincn).onclick = new Function("clickSelects('"+name+"');");
$('select_info_' +name).addEventListener("click", stopBubbling, false);
}}function clickSelects(name){
var sincn = 'select_info_' + name;
var sinul = 'options_' + name; for (i=0;i<selects.length;i++){
if(selects[i].name == name){
if( $(sincn).className =='tag_select_hover'){
$(sincn).className ='tag_select_open';
$(sinul).style.display = '';
}
else if( $(sincn).className =='tag_select_open'){
$(sincn).className = 'tag_select_hover';
$(sinul).style.display = 'none';
}
}
else{
$('select_info_' + selects[i].name).className = 'tag_select';
$('options_' + selects[i].name).style.display = 'none';
}
}}function clickOptions(i, n, name){
var li = $('options_' + name).getElementsByTagName('li'); $('selected_' + name).className='open';
$('selected_' + name).id='';
li[n].id='selected_' + name;
li[n].className='open_hover';
$('select_' + name).removeChild($('select_info_' + name)); select_info = document.createElement('div');
select_info.id = 'select_info_' + name;
select_info.className='tag_select';
select_info.style.cursor='pointer';
$('options_' + name).parentNode.insertBefore(select_info,$('options_' + name)); mouseSelects(name); $('select_info_' + name).appendChild(document.createTextNode(li[n].innerHTML));
$( 'options_' + name ).style.display = 'none' ;
$( 'select_info_' + name ).className = 'tag_select';
selects[i].options[n].selected = 'selected';}window.onload = function(e) {
bodyclick = document.getElementsByTagName('body').item(0);
rSelects();
bodyclick.onclick = function(){
for (i=0;i<selects.length;i++){
$('select_info_' + selects[i].name).className = 'tag_select';
$('options_' + selects[i].name).style.display = 'none';
}

}
}
</script>
</head><body>
<div id="macstyle">
 <select >
      <option value="北京">北京</option>
      <option value="上海" >上海</option>
      <option value="武汉" >武汉</option>
      <option value="南京" >南京</option>
      <option value="广州" >广州</option>
      <option value="沈阳" >沈阳</option>
      <option value="西安" >西安</option>
      <option value="郑州" >郑州</option>
      <option value="长沙" >长沙</option>
 </select>
</div>
</body>
</html>
下拉

解决方案 »

  1.   

    一个偷机的办法是:当这个层展开的时候,在添加一个透明的全遮罩层,然后点击遮罩层关闭菜单。
    另外一个办法是,判断当点击的相关元素不是这个弹出的元素,或弹出的内部元素时关闭这个菜单。function showSub(obj, sub){
        var sub = $(sub);
        $(obj).on('click', function(){
            sub.toggle();        if (!$('.pop').length) {
                $('<div class="pop"></div>').appendTo('body');
            }
            $('.pop').show();
        });
        $(document).on('click', '.pop', function(e){
            sub.hide();
            $(this).hide();
        });
    }
      

  2.   

    给body 统计点击事件。判断点击元素是否浮动菜单的子元素。如果不是,就关闭