`
wangking717
  • 浏览: 262467 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

DIV+CSS实现仿SELECT下拉框代码(JQUERY)

 
阅读更多

 

wangking 写道
下拉框特点:
1.可自定义下拉框的高度和宽度。
2.无需用户写多余代码,就和用原生态的SELECT一样的原理,使用简单。
3.功能强大,在下拉框中增加了extraData   DIV层,供用户自定义特殊需求,当然用户也可以不选择使用extraData   DIV层,用普通的SELECT即可。

 

下拉框截图:


 

具体代码:

 

<!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>
<script type="text/javascript" src="__JS__/jquery.min.js"></script>
<style type="text/css">
<!--
body {padding:10px;}
* {margin:0; padding:0; font-size:12px;}
ul,li {list-style-type:none;}
.select {width:150px; height:25px; border:1px solid #ccc; padding-left:10px;}
.defaultItem{background:url(__IMAGE__/select_arrow.gif) no-repeat right center white;}
.select span {cursor:pointer; display:block;  width:100%; height:100%;overflow:hidden;}
.select table {height:100%;}
.select td {vertical-align:middle;}
.select ul{width:181px;}
.select ul li {cursor:pointer;}
.select .items {overflow-y: scroll; overflow-x: hidden;max-height:148px; height:148px;width:180px; position:absolute;border:1px dashed #ccc; background:#fff;z-index:999;display:none;}
.select .items li {display:block; line-height:25px; padding-left:10px;}
.select .hover,.onhover {background:#ccc;}
.select .extraData{position:absolute;line-height:20px;padding-left:10px; padding-top:5px; padding-bottom:5px;border:1px dashed #ccc;background:white;display:none;}
-->
</style>
<script type="text/javascript">
  var isItemHover = 0;	//	ITEM是否正在HOVER使用,供清楚ONHOVER状态
  var delayTime4Select = null;	//延迟消失下拉框
  var selectUsingObj = "";	//正在使用哪个SELECT,供MOUSE OVER AND OUT时使用
  var selectCloseUsing = 0;	//是否在执行关闭操作	
  var isClickSelectTextObj = 0;	//是否点击了SELECT控件里的输入框
  
  $(document).ready(function(){
  		$(".select :text").click(function(){	//当鼠标点击了.select里面的任何一个输入框,则取消掉[鼠标移出焦点后,自动消失事件]
			isClickSelectTextObj = 1;
		});
		$('.defaultItem').click(function(event){ //鼠标点击[请选择],弹出下拉框
			if(selectCloseUsing == 1){
				return;
			}
			var parentObj = $(this).parent();
			if(selectUsingObj != "" && selectUsingObj != parentObj.attr("idtag")){
				$("[idtag='"+selectUsingObj+"']").find('ul.items').hide();
				$("[idtag='"+selectUsingObj+"']").find('.extraData').hide();
			}
			if(selectUsingObj != ""){	//点击事件[执行关闭SELECT]操作
				clearTimeout(delayTime4Select);
				selectCloseUsing = 1;
				var itemsOBJ = parentObj.find('ul.items');;
				itemsOBJ.hide();
				var extraOBJ = $("[idtag='"+selectUsingObj+"']").find(".extraData");
				extraOBJ.hide();
				selectUsingObj = "";
				delayTime4Select = setTimeout(function(){
					selectCloseUsing = 0;
					isClickSelectTextObj = 0;
				},200);
			}else{		//点击事件[执行打开SELECT]操作
				selectUsingObj = parentObj.attr("idtag");
				clearTimeout(delayTime4Select);
				var selectWidth = parentObj.width();	//动态设置ul.items宽度
				var selectHeight = parentObj.height();	//动态设置ul.items的TOP偏移量
				var id = parentObj.attr("idtag");
				var hiddenVal = "";	//隐藏域的值,用来显示选中ITEM项
				var element=$("#"+id);
				if(element.length > 0){
					hiddenVal = $("#"+id).val();
				}
				var itemsOBJ = parentObj.find('ul.items');
				itemsOBJ.css("width",selectWidth+11);
				itemsOBJ.css({top:parentObj.offset().top+selectHeight,left:parentObj.offset().left});
				itemsOBJ.show(); //找到ul.items显示
				var extraOBJ = parentObj.find(".extraData");
				if(extraOBJ.length > 0){	//SELECT额外数据DIV存在
					extraOBJ.css("width",selectWidth+1);
					extraOBJ.css({top:parentObj.offset().top+selectHeight+itemsOBJ.height(),left:parentObj.offset().left});
					extraOBJ.show();
				}
				parentObj.find('li').hover(function(){
					isItemHover = 1;
					$(this).addClass('hover');
					$(this).parent().find('li').removeClass('onhover');
				}, function(){
					$(this).removeClass('hover');
				});//li的hover效果
				if(isItemHover == 0){
					itemsOBJ.find("li").each(function(){
						if(hiddenVal == $(this).attr("value")){
							$(this).addClass('onhover');
						}
					});
				}
			}
		});
		$('.select,.extraData').mouseover(function(event){
			selectCloseUsing = 0;
		});
		$('.select,.extraData').mouseout(function(event){
			selectCloseUsing = 1;
			var toElement = null;
			if ($.browser.mozilla){	//火狐下不支持toElement
				toElement = event.relatedTarget;
			}else{
				toElement = event.toElement;
			}
			if($(this)[0].contains(toElement)){	//如果是内部元素,则不执行以下代码
				return;
			}
			var itemsOBJ = null;
			if($(this).attr("class") == "select"){
				itemsOBJ = $(this).find('ul.items');
			}else{
				itemsOBJ = $(this).parents("div").find('ul.items');
			}
			delayTime4Select = setTimeout(function(){
				if(selectCloseUsing == 1 && isClickSelectTextObj == 0){
					itemsOBJ.hide();
					var extraOBJ = $("[idtag='"+selectUsingObj+"']").find(".extraData");
					if (extraOBJ.length > 0) {
						extraOBJ.hide();
					}
					isItemHover = 0;
					selectUsingObj = "";
				}
			},3000);
		});
		$('ul.items li').live("click",function(){
			selectCloseUsing = 1;
			var parentDiv = $(this).parents("div");
			parentDiv.find('td').html($(this).html());
			var id = parentDiv.attr("idtag");
			var element=$("#"+id);
			if(element.length > 0){
				$("#"+id).val($(this).attr("value"));
			}else{
			   parentDiv.after('<input type="hidden" id="'+id+'" name="'+id+'" value="'+$(this).attr("value")+'"/>');
			}
			parentDiv.find('ul').hide();
			var extraOBJ = $("[idtag='"+selectUsingObj+"']").find(".extraData");
			if (extraOBJ.length > 0) {
				extraOBJ.hide();
			}
			selectUsingObj = "";
			isItemHover = 0;
			delayTime4Select = setTimeout(function(){
				selectCloseUsing = 0;
				isClickSelectTextObj = 0;
			},200);
		});
	});
	
	//给firefox定义contains()方法,ie下不起作用
	if(typeof(HTMLElement)!="undefined"){
	   HTMLElement.prototype.contains=function(obj){ 
              while(obj!=null&&typeof(obj.tagName)!="undefind"){ //通过循环对比来判断是不是obj的父元素
                 if(obj==this) return true;
               obj=obj.parentNode;
               } 
              return false;
		};  
	}
	
	function closeSelect(obj){
		selectCloseUsing = 1;
		var itemsOBJ = $(obj).parents("div").find('ul.items');;
		itemsOBJ.hide();
		var extraOBJ = $("[idtag='"+selectUsingObj+"']").find(".extraData");
		extraOBJ.hide();
		selectUsingObj = "";
		delayTime4Select = setTimeout(function(){
			selectCloseUsing = 0;
			isClickSelectTextObj = 0;
		},200);
	}
</script>
</head>

<body>
  <div idtag="name" class="select" style="width:521px;height:50px;">
    <span class="defaultItem"><table><tr><td>请选择...</td></tr></table></span>
    <ul class="items">
      <li value="1111">选项一</li>
      <li value="2222">选项二</li>
      <li value="3333">选项三</li>
      <li value="4444">选项四</li>
      <li value="5555">选项五</li>
	  <li value="6666">选项六</li>
      <li value="7777">选项七</li>
      <li value="8888">选项八</li>
      <li value="9999">选项九</li>
      <li value="0000">选项十</li>
    </ul>
	<div class="extraData">
		<input type="text" id="aaa" value="Close"/>
		这个DIV层属于扩展层,用户可根据自己需求确定是否需要这个。<input type="button" id="aaa" value="Close" onclick="closeSelect(this)"/></div>
  </div>
	<br/><br/><br/>
  <!-- SELECT.......[开始] -->
  <div idtag="users" class="select">
    <span class="defaultItem"><table><tr><td>请选择...</td></tr></table></span>
    <ul class="items">
      <li value="1">wangking</li>
      <li value="2">jiaojiao</li>
    </ul>
  </div>
  <!-- SELECT.......[结束] --><br/><br/><br/>
  <input type="text" id="testinput" /><br/><br/><br/>
  <input type="text" id="haha" />
</body>
</html>

 

 

怎么使用?如下:

 

INCLUDE  CSS   AND  JS。。。。 THEN。。。

这个是原生态的SELECT:
<select name="users" id="users">
    <option value="1">wangking</option>
    <option value="2">jiaojiao</option>
</select>

则对应改为:

<div idtag="users" class="select">
    <span class="defaultItem"><table><tr><td>请选择...</td></tr></table></span>
    <ul class="items">
      <li value="1">wangking</li>
      <li value="2">jiaojiao</li>
    </ul>
</div>
 

 

PS: 欢迎共同讨论交流。

 

 

  • 大小: 28.6 KB
分享到:
评论

相关推荐

    精美漂亮的实用div+css模仿select下拉框控件

    本项目通过`jq`(jQuery)库实现了对`select`控件的模仿,创建了一款既美观又实用的下拉框控件。下面将详细讲解这个知识点。 1. **jQuery (jq) 库的使用** jQuery 是一个轻量级的JavaScript库,它简化了HTML文档...

    DIV+CSS封装的一个下拉框效果

    在网页设计中,"DIV+CSS封装的一个下拉框效果"是一种常见的交互设计技术,它通过结合HTML结构、CSS样式以及可能的JavaScript(如Jquery)来实现更加灵活且美观的下拉选择功能。这种技术相比传统的HTML下拉框(`...

    jQuery手机下拉框select

    总的来说,`jQuery手机下拉框select` 是通过jQuery Mobile库实现的一种优化移动端用户体验的解决方案。它提供了丰富的样式、交互和功能特性,帮助开发者创建出更符合移动设备需求的下拉菜单。通过理解和应用这些技术...

    jQuery select下拉框美化代码.zip

    `jQuery select下拉框美化代码`这个压缩包的实现可能还包含了其他细节,如防止多次点击导致的闪烁,以及在鼠标移出下拉框时自动隐藏内容等功能。这种美化代码对于提升网站的用户体验和专业感具有积极意义,特别是...

    实用select下拉框美化jquery插件

    这是一款实用的select下拉框美化jquery插件。该select下拉框的原理是将select标签隐藏,并按照select标签用div和list绘制一个控件,将用户对div的操作映射到select上。css文件可以根据不同需求修改。

    DIV模拟select下拉框

    "DIV模拟select下拉框"就是一种利用JavaScript库,如jQuery,来实现这一目标的技术。它通过用CSS样式化的DIV元素替换原生的SELECT元素,从而提供更灵活的外观和交互体验。 标题中的"DIV模拟select下拉框"意味着我们...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    4.jquery+div实现同时滑动切换的图文展示特效插件下载 5.jquery+div带动画按钮图片手动与自动切换的特效代码 6.jquery一页多用的飞飞图片幻灯插件演示 7.jquery仿flash产品图片多角度展示特效代码 8.jquery...

    jQuery实现select下拉框样式美化效果

    本资源主要介绍如何使用jQuery来实现select下拉框的样式美化效果。 首先,我们需要引入jQuery库。jQuery的最新版本可以在官方网站(https://jquery.com/download/)下载,也可以通过CDN链接快速引入,如: ```html ...

    jquery实现可多选下拉框

    现在,我们可以编写 jQuery 代码来实现多选下拉框的功能。首先,我们需要获取到这个下拉框元素,然后绑定事件监听器,以便在用户选择或取消选择选项时更新界面。例如,我们可以通过以下代码实现这一功能: ```...

    jquery select下拉框美化代码.zip

    "jquery select下拉框美化代码.zip" 提供了一种解决方案,通过结合jQuery库来增强和美化下拉框的外观和交互效果,使其更加吸引用户。 这个代码包可能包含以下几个部分: 1. **jQuery库**:jQuery是一个广泛使用的...

    div模拟下拉菜单(select)jquery插件.gz

    为了解决这个问题,开发者常常使用`div`元素配合CSS和JavaScript来模拟下拉菜单,以实现更加灵活和美观的效果。在这个"div模拟下拉菜单(select)jquery插件.gz"压缩包中,包含的就是这样一个基于`div`和jQuery的...

    HTML5+CSS3实现的自定义下拉框菜单效果源码 3D卡片折叠动画.zip

    代码中可能还使用了JavaScript库,如jQuery,来简化DOM操作和事件处理,或是使用原生的JavaScript API来增加性能和兼容性。 总之,这个源码示例展示了HTML5和CSS3的强大组合,不仅实现了自定义的下拉框菜单,还加入...

    jQuery模拟select下拉框三级城市联动代码.zip

    在网页开发中,"jQuery模拟select下拉框三级城市联动代码"是一种常见的交互设计,用于实现用户在选择一级城市后,自动更新二级城市列表,接着选择二级城市后,再动态加载三级城市的联动效果。这种技术提高了用户体验...

    div模拟select自定义下拉列表框(jQuery)

    `div模拟select自定义下拉列表框`是一种常见做法,它利用JavaScript(如jQuery)和CSS来实现,可以提供比原生`&lt;select&gt;`元素更丰富的样式控制和交互体验。本篇将详细介绍这种技术及其应用。 一、为什么使用div模拟...

    jquery模拟div多选checkbox下拉框

    3. **CSS样式和动画**:使用`&lt;div&gt;`而非原生`&lt;select&gt;`可以实现自定义样式,通过CSS可以设置下拉框的外观,包括颜色、大小、边框等。jQuery还可以用来实现动画效果,比如下拉框展开和收起的过渡动画。 4. **数据...

    select下拉框可编辑输入框

    在"select下拉框可编辑输入框"的设计中,CSS起到了至关重要的作用,主要体现在以下几个方面: 1. **样式定制**:通过CSS,我们可以定制下拉框的外观,如边框、背景色、字体样式等,使其与网页的整体设计风格保持...

    jQuery实现select下拉框菜单选中插件.zip

    总之,"jQuery实现select下拉框菜单选中插件.zip"是一个旨在提升`&lt;select&gt;`元素用户体验的工具。通过深入理解jQuery的API、CSS样式和可能的事件处理,你可以有效地利用这个插件,为你的网页项目添加专业且个性化的...

    基于jquery实现的多选下拉框

    **基于jQuery实现的多选下拉框** 在Web开发中,传统的HTML下拉框(`&lt;select&gt;`元素)...在实际项目中,可以进一步优化代码,例如使用CSS3来美化下拉框样式,或者使用插件如Chosen或Select2来提供更高级的下拉框组件。

    小清新的 jQuery select 下拉框样式美化效果

    本主题关注的是如何使用jQuery库来实现“小清新的”下拉框(select)样式美化效果。jQuery,作为一款强大的JavaScript库,简化了DOM操作、事件处理以及动画效果,使得开发者能够更便捷地实现此类功能。 首先,我们...

    jquery 实现下拉框左右选择

    本文将深入探讨如何使用jQuery实现一个下拉框左右选择的功能,这是一个常见于用户界面设计中的交互元素,通常用于选项筛选或数据迁移。 首先,我们需要理解下拉框左右选择的基本概念。这种设计通常包含两个部分:...

Global site tag (gtag.js) - Google Analytics