`
abruzzi
  • 浏览: 452413 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

用jQuery做的一个dropdown-list

阅读更多

前言

dropdown list 是web应用中比较常用的一种控件,HTML标准提供的select标签的功能略显单薄,最大的缺点是不能定制图标,所以一般都是用div标签来模拟。又由于通用,所以有必要将其抽象成一个通用的控件,这样每次使用的时候只需要提供dropdown list 的数据模型即可。

 

效果图



收缩起来的效果


展开的效果

 

设计与实现

初步的设想是,提供一个标准的数据模型(data model),然后通过调用一个javascript函数,动态的画出dropdown list来,这个例子中使用的数据模型如下:

/**
 * This is the list data model, defined
 * the style of the list, and all items it contained.
 */
var listDataModel = {
	style : {width:"440px", float:"left"},
	contents : [	
		{content:"CrossTable", icon:"images/crosstable.gif"},
		{content:"Table", icon:"images/table.gif"},
		{content:"Label", icon:"images/label.gif"},
		{content:"Image", icon:"images/image.gif"},
		{content:"Chart", icon:"images/chart.gif"}
	]
};

 用一个内部的(私有的)函数构造dropdown list的panel,也就是下拉出来的那个panel,其中包含所有的item,类似于select控件的option,这个函数不必暴露给最终的使用者:

/**
 * generate the dropdown panel, contains all list items
 * and then fulfill the container.
 * @dataModel data model of the list items
 * @container container of all list items
 */
function buildDropDownList(dataModel, container){
	var dropdownList = $("<div></div>").addClass("dropdownList_");
	var dropdownPanel = $("<div></div>").addClass("dropdownPanel");
	dropdownList.css("padding-left", "18px").text("Please Select a value");
	dropdownPanel.hide();
	dropdownList.click(function(){
		dropdownPanel.toggle();
	});

	for(var i = 0;i < dataModel.length;i++){
		var itemContainer = $("<div></div>").addClass("listItemContainer");
		itemContainer.css("background", "url(" + dataModel[i].icon + ") no-repeat");
		var item = $("<div></div>").addClass("listItem");
		item.text(dataModel[i].content);
		item.mouseover(function(){
			$(this).addClass("selected");
		}).mouseout(function(){
			$(this).removeClass("selected");
		}).click(function(){
			dropdownList.text($(this).text());
			dropdownList
			.css("background", $(this).parent().css("background"))
			.css("padding-left",$(this).parent().css("padding-left"));
			dropdownPanel.hide();
		});
		dropdownPanel.append(itemContainer.append(item));
	}
	container.append(dropdownList).append(dropdownPanel);
}

 然后,是我们需要暴露给用户的接口函数,这个函数接受一个参数,集数据模型,然后返回一个jQuery对象,调用者通常是一个container, 使用jQuery的话,可以很方便的使用container.append()将其插入到合适的位置:

/**
 * this is the interface for end-user, to use this function, you should provide:
 * @datamodel datamodel of the list object
 */
function dropdownList(dataModel){
	var ddcontainer = $("<div></div>").addClass("dropdownlist");
	for(var p in dataModel.style){ddcontainer.css(p, dataModel.style[p]);}
	var layout = 
		$("<table></table>")
		.attr({border:"0", cellspacing:"0", cellpadding:"0", width:"100%"});
		
	var dropdown = $("<tr></tr>");
	var listContainerTd = $("<td></td>").addClass("black");
	var listContainer = $("<div></div>");
	
	buildDropDownList(dataModel.contents, listContainer);
	listContainer.appendTo(listContainerTd);
	listContainerTd.appendTo(dropdown);
	var ddicon = 
		$("<td></td>").css({width:"17px", align:"right"}).append(
			$("<div></div>").attr("id", "ddicon").append(
				$("<img />")
				.css({width:"16px", height:"16px"})
				.attr("src", "images/dropdownlist_arrow.gif")
			)
		);
	
	ddicon.children(0).mouseover(function(){
		$(this).children(0).attr("src", "images/dropdownlist_arrow_hov.gif");
	}).mouseout(function(){
		$(this).children(0).attr("src", "images/dropdownlist_arrow.gif");
	}).click(function(){
		listContainer.children(0).click();
	});
	
	ddicon.appendTo(dropdown);
	dropdown.appendTo(layout);
	layout.append(dropdown);
	layout.appendTo(ddcontainer);
	
	return ddcontainer;
}

 

 

代码中,为每个item(option)提供必要的事件处理器,比如当鼠标移过时高亮显示,当单击时将值放入list中,并隐藏panel等。

 

使用jQuery确实可以提高效率,比如创建DOM元素,并添加到节点上,注册事件,设置DOM元素的style等,非常方便。最后,当然是$(document).ready() :

/**
 * execute those code when document tree is ready, it'll generate the 
 * dropdown list.
 */
$(document).ready(function(){
	var container = $("#list");
	container.append(dropdownList(listDataModel));
	$("#click").click(function(){
		alert("item ["+$("#list > div > table tr > td > div :first").text()+"] is selected");
	});
});

 到这里,这个dropdown list就已经完成了,看看如何使用

使用

使用起来很简单,需要在你的页面中指定一个dropdown list的容器div就可以了:

<html>
	<head>
		<meta http-equiv="Content-type" content="text/html; charset=utf-8">
		<title>yalist</title>
		<link rel="stylesheet" href="style/yalist.css" type="text/css">
		<script src="js/jquery-1.3.2.min.js" type="text/javascript" ></script>
		<script src="js/yalist.js" type="text/javascript" ></script>
	</head>
	<body>
		<div id="page" class="page">
			<table border="0" cellspacing="5" cellpadding="5">
				<tr>
					<td>
						<div id="list"></div>
					</td>
				</tr>
				<tr>
					<td>
						<input 
							type="button" 
							name="click" 
							value="show item value" 
							id="click">		
					</td>
				</tr>
			</table>
		</div>
	</body>
</html>

 

okay, 这个dropdown list的介绍就到这里,有时间的话可以对table, text panel之类的做一些封装,方便使用,可以在一定程度上提高开发效率。

jQuery真是个好东西,不但支持全部的CSS3的选择器,而且支持一些自定义的选择器,如XPath选择器,重要的,最重要的是,在浏览器的兼容性方面的支持,这才是WEB开发中最令人头疼的问题。代码附在附件中,有需要的可以去看看(此list名叫yalist ,意为 yet another list)。

  • 大小: 2.3 KB
  • 大小: 5.1 KB
分享到:
评论
3 楼 chainfox 2009-08-21  
我用的IE,效果很好,支持楼主
2 楼 abruzzi 2009-08-21  
royzhou1985 写道
定位有问题 我用的是firefox浏览器

方便的话,截个图看看,我用的FF3.5,效果如文章中的图所示。呵呵
1 楼 royzhou1985 2009-08-21  
定位有问题 我用的是firefox浏览器

相关推荐

    jquery.dropdown:可定制的风格化下拉菜单

    jquery.dropdown-jQuery插件 基本用法: 在页面中包含JS和CSS,并调用dropdown jQuery方法来格式化select输入。 $ ( 'select' ) . dropdown ( ) ; 注意:每个select输入必须具有关联的id属性(否则,您将需要...

    dropdown-checkbox:基于JQuery的下拉复选框列表

    下拉复选框基于JQuery的下拉复选框列表(JQuery 1.7.2+) dropdown-checkbox是基于JQuery的下拉复选框列表,用于轻松地将HTML select标签替换为添加的“ multiple”属性,并使用复选框将其转换为下拉列表。...

    jquery下拉菜单

    一个基本的下拉菜单通常由一个父级`&lt;ul&gt;`元素和多个子级`&lt;li&gt;`元素组成,每个子级`&lt;li&gt;`可能包含一个或多个下拉项。例如: ```html &lt;ul class="dropdown-menu"&gt; &lt;li&gt;&lt;a href="#"&gt;菜单1 &lt;li&gt;&lt;a href="#"&gt;子...

    jQuery折叠下拉菜单收缩展开.zip

    在`&lt;head&gt;`标签内添加`&lt;style&gt;`标签或者在外部创建一个CSS文件,然后定义相应的类。例如: ```css .dropdown-menu { background-color: #FFA500; /* 橙色背景 */ } .dropdown-menu li { list-style-type: none; ...

    (java版本)自己做了一个jquery ajax异步请求,获得一个list对象的下拉框例子

    在本文中,我们将深入探讨如何使用Java和jQuery AJAX来实现异步请求,从而获取服务器端的一个List对象,并将其数据填充到前端的下拉框(dropdown)中。这个过程涉及到前端与后端的交互,JSON对象的序列化和反序列化...

    jquery we ui 完整包(带demo)

    总之,jQuery WeUI 提供了一个高效、一致的开发环境,尤其适合微信生态内的Web应用。通过这个完整包,开发者不仅可以得到WeUI的所有组件,还能通过示例代码快速上手,提高开发效率。在实际项目中,合理利用WeUI,将...

    jquery简单的二级下拉菜单

    `jQuery` 是一个广泛使用的 JavaScript 库,简化了DOM操作、事件处理和动画效果,因此常用于实现交互式下拉菜单。本文将详细介绍如何使用 jQuery 创建一个简单的二级下拉菜单,同时支持边框阴影效果。 首先,确保在...

    jquery下拉导航

    本知识点将详细讲解如何利用jQuery实现一个下拉导航菜单。 一、jQuery下拉导航的基本原理 下拉导航菜单是网页设计中常见的功能,通常用于在有限的空间内展示多层次的导航链接。jQuery的灵活性和强大的DOM操作能力...

    jQuery 自定义下拉框(DropDown)附源码下载

    先给大家展示下效果图,喜欢的朋友可以下载源码哦 效果演示 源码下载 &lt;div class=wrapper-demo&gt; &lt;div id=dd class=wrapper-... &lt;li&gt;&lt;a&gt;jQuery特效&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a&gt;网站模板&lt;/a&gt;&lt;/li&gt; &lt;/section&gt;

    jQuery黄色下拉滑动导航菜单代码.zip

    在本文中,我们将深入探讨如何使用jQuery和CSS创建一个黄色的下拉滑动导航菜单。这个项目的核心在于利用JavaScript库jQuery的动态功能和CSS的样式控制,为网站提供交互式的用户体验。 首先,jQuery是一个轻量级的...

    jQuery网站Tab下拉菜单特效.zip

    本文将深入解析如何利用jQuery实现一个功能完善的Tab下拉菜单特效,结合CSS样式和JavaScript逻辑,为网页增添动态美感。 一、jQuery简介 jQuery是一款高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、...

    CSS + jQuery 个性化的下拉框效果

    本文将深入探讨如何结合CSS和jQuery来实现一个富有特色的下拉框效果。 首先,CSS(层叠样式表)是网页设计中的关键部分,用于定义页面的布局和样式。在个性化下拉框的设计中,我们可以利用CSS来控制下拉框的基本...

    jQuery-searchableSelect下拉框搜索插件

    为了解决这个问题,`jQuery-searchableSelect` 插件应运而生,它是一个强大的下拉框搜索美化工具,可以显著提升用户体验。 **插件功能** 1. **实时搜索**:`jQuery-searchableSelect` 提供了在下拉框内输入关键字...

    jquery hover向下滑动导航.zip

    在前端开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理、动画制作等任务。"jQuery hover向下滑动导航"是一个常见的交互设计,通常用于网站顶部菜单或侧边栏,当用户鼠标悬停在某个导航项上...

    jQuery制作的下拉选项菜单.zip

    通常,我们会使用`&lt;ul&gt;`和`&lt;li&gt;`标签来创建一个无序列表,其中每个`&lt;li&gt;`标签包含主菜单项和一个可选的子菜单。子菜单可以通过嵌套`&lt;ul&gt;`实现,如下所示: ```html &lt;ul id="dropdown-menu"&gt; &lt;li&gt;&lt;a href="#"&gt;主...

    jQuery简单博客下拉导航菜单效果

    对于创建动态和交互性强的网页,jQuery是一个理想的选择。在博客中应用下拉导航菜单,可以有效组织多个层级的页面链接,使得用户在有限的空间内能够访问更多的内容。 要创建一个jQuery下拉导航菜单,首先我们需要在...

    js控制下拉菜单

    此时,我们可以使用JS和jQuery来创建一个可自定义样式的下拉菜单。首先,我们需要在HTML中创建一个容器元素,用于放置下拉菜单的结构: ```html &lt;div class="dropdown-title"&gt;请选择 &lt;ul class="dropdown-list" ...

    jQuery遮罩下拉导航 jQuery遮罩下拉导航网页特效.zip

    jQuery遮罩下拉导航的基本思想是利用CSS和JavaScript(主要通过jQuery库)来创建一个响应式的菜单系统。当用户鼠标悬停在导航菜单项上时,会触发一个遮罩层,同时显示下拉子菜单。这个过程通过改变元素的样式(如...

    dropdown-navbar

    通常,这种导航栏在初始状态下显示顶级菜单项,当用户悬停或点击时,会展示下级菜单,呈现出一个多级导航的效果。"dropdown-navbar"这个主题就专注于这一功能的实现。 在HTML中,构建下拉导航栏主要涉及到`&lt;nav&gt;`、...

    Jquery Combo下拉框示例

    jQuery ComboJS是一个轻量级的库,专门用于创建功能丰富的下拉框组件。它以其简单易用、样式灵活和高度可配置的特点,深受开发者喜爱。 ### 1. jQuery与ComboJS jQuery是一款广泛使用的JavaScript库,简化了HTML...

Global site tag (gtag.js) - Google Analytics