前言
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
分享到:
- 2009-08-20 21:28
- 浏览 4737
- 评论(3)
- 论坛回复 / 浏览 (2 / 7187)
- 查看更多
相关推荐
jquery.dropdown-jQuery插件 基本用法: 在页面中包含JS和CSS,并调用dropdown jQuery方法来格式化select输入。 $ ( 'select' ) . dropdown ( ) ; 注意:每个select输入必须具有关联的id属性(否则,您将需要...
下拉复选框基于JQuery的下拉复选框列表(JQuery 1.7.2+) dropdown-checkbox是基于JQuery的下拉复选框列表,用于轻松地将HTML select标签替换为添加的“ multiple”属性,并使用复选框将其转换为下拉列表。...
一个基本的下拉菜单通常由一个父级`<ul>`元素和多个子级`<li>`元素组成,每个子级`<li>`可能包含一个或多个下拉项。例如: ```html <ul class="dropdown-menu"> <li><a href="#">菜单1 <li><a href="#">子...
在`<head>`标签内添加`<style>`标签或者在外部创建一个CSS文件,然后定义相应的类。例如: ```css .dropdown-menu { background-color: #FFA500; /* 橙色背景 */ } .dropdown-menu li { list-style-type: none; ...
在本文中,我们将深入探讨如何使用Java和jQuery AJAX来实现异步请求,从而获取服务器端的一个List对象,并将其数据填充到前端的下拉框(dropdown)中。这个过程涉及到前端与后端的交互,JSON对象的序列化和反序列化...
总之,jQuery WeUI 提供了一个高效、一致的开发环境,尤其适合微信生态内的Web应用。通过这个完整包,开发者不仅可以得到WeUI的所有组件,还能通过示例代码快速上手,提高开发效率。在实际项目中,合理利用WeUI,将...
`jQuery` 是一个广泛使用的 JavaScript 库,简化了DOM操作、事件处理和动画效果,因此常用于实现交互式下拉菜单。本文将详细介绍如何使用 jQuery 创建一个简单的二级下拉菜单,同时支持边框阴影效果。 首先,确保在...
本知识点将详细讲解如何利用jQuery实现一个下拉导航菜单。 一、jQuery下拉导航的基本原理 下拉导航菜单是网页设计中常见的功能,通常用于在有限的空间内展示多层次的导航链接。jQuery的灵活性和强大的DOM操作能力...
先给大家展示下效果图,喜欢的朋友可以下载源码哦 效果演示 源码下载 <div class=wrapper-demo> <div id=dd class=wrapper-... <li><a>jQuery特效</a></li> <li><a>网站模板</a></li> </section>
在本文中,我们将深入探讨如何使用jQuery和CSS创建一个黄色的下拉滑动导航菜单。这个项目的核心在于利用JavaScript库jQuery的动态功能和CSS的样式控制,为网站提供交互式的用户体验。 首先,jQuery是一个轻量级的...
本文将深入解析如何利用jQuery实现一个功能完善的Tab下拉菜单特效,结合CSS样式和JavaScript逻辑,为网页增添动态美感。 一、jQuery简介 jQuery是一款高效、简洁的JavaScript库,它简化了HTML文档遍历、事件处理、...
本文将深入探讨如何结合CSS和jQuery来实现一个富有特色的下拉框效果。 首先,CSS(层叠样式表)是网页设计中的关键部分,用于定义页面的布局和样式。在个性化下拉框的设计中,我们可以利用CSS来控制下拉框的基本...
为了解决这个问题,`jQuery-searchableSelect` 插件应运而生,它是一个强大的下拉框搜索美化工具,可以显著提升用户体验。 **插件功能** 1. **实时搜索**:`jQuery-searchableSelect` 提供了在下拉框内输入关键字...
在前端开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理、动画制作等任务。"jQuery hover向下滑动导航"是一个常见的交互设计,通常用于网站顶部菜单或侧边栏,当用户鼠标悬停在某个导航项上...
通常,我们会使用`<ul>`和`<li>`标签来创建一个无序列表,其中每个`<li>`标签包含主菜单项和一个可选的子菜单。子菜单可以通过嵌套`<ul>`实现,如下所示: ```html <ul id="dropdown-menu"> <li><a href="#">主...
对于创建动态和交互性强的网页,jQuery是一个理想的选择。在博客中应用下拉导航菜单,可以有效组织多个层级的页面链接,使得用户在有限的空间内能够访问更多的内容。 要创建一个jQuery下拉导航菜单,首先我们需要在...
此时,我们可以使用JS和jQuery来创建一个可自定义样式的下拉菜单。首先,我们需要在HTML中创建一个容器元素,用于放置下拉菜单的结构: ```html <div class="dropdown-title">请选择 <ul class="dropdown-list" ...
jQuery遮罩下拉导航的基本思想是利用CSS和JavaScript(主要通过jQuery库)来创建一个响应式的菜单系统。当用户鼠标悬停在导航菜单项上时,会触发一个遮罩层,同时显示下拉子菜单。这个过程通过改变元素的样式(如...
通常,这种导航栏在初始状态下显示顶级菜单项,当用户悬停或点击时,会展示下级菜单,呈现出一个多级导航的效果。"dropdown-navbar"这个主题就专注于这一功能的实现。 在HTML中,构建下拉导航栏主要涉及到`<nav>`、...
jQuery ComboJS是一个轻量级的库,专门用于创建功能丰富的下拉框组件。它以其简单易用、样式灵活和高度可配置的特点,深受开发者喜爱。 ### 1. jQuery与ComboJS jQuery是一款广泛使用的JavaScript库,简化了HTML...