jquery打造自定义控件(原创)
本人第一次发表文章,不足之出请大家多多包涵







下面是一个combox的代码
/// <reference path="../Js/jquery-1.7.2.min.js" />
$.extend({
//下拉列表框
qyjcombox: function (select) {
//这里是初始化
var htmlstr = "<div class=\"boxwrap\"><a class=\"select-tit\" href=\"javascript:;\"><span></span><i></i></a><div class=\"select-items\" style=\"z-index: 1; display: none;\"><ul><li> ├ 房产动态</li></ul></div><i class=\"arrow\" style=\"z-index: 1; display: none;\"></i></div>";
var cbjq = $(select);
//在用户定义的节点中填充我们的combox
cbjq.html(htmlstr);
//并附上class
cbjq.addClass("rule-single-select single-select");
//要复制多次的节点
var copeItem = $("li", select);
//要添加到的父节点
var itemParant = copeItem.parent();
//要复制的节点获取到父节点后马上删除
copeItem.remove();
//下拉选中后显示值的节点
var showText=cbjq.find("span").first();
//这里是列表框的业务逻辑
//记录选项的数组
var list = [];
var isShow = true;
//注册文本框单击事件
$(".select-tit", select).click(HideOrShow);
//显示或者隐藏
function HideOrShow() {
if (isShow) {
ShowList();
} else {
hideList();
}
}
// title 和id 后面的是自定义属性
this.addItem = function (title, id, itemObj) {
//复制节点
var newItem = copeItem.clone();
//给节点附名字
newItem.html(title);
newItem.bind("click", clickEvent);
itemParant.append(newItem);
list.push({
title: title,
id: id,
itemObj: itemObj,
dom: newItem
});
}
//显示下拉列表
function ShowList() {
isShow = false;
$(".select-items", select).css("display", "block");
$(".arrow", select).css("display", "block");
}
//隐藏列表
function hideList() {
isShow = true;
$(".select-items", select).css("display", "none");
$(".arrow", select).css("display", "none");
}
function clickEvent() {
var node = $(this);
showText.html(node.html());
hideList();
}
//注册选项改变事件
this.itemChangeEvent = function (changFunc) {
for (var i = 0; i < list.length; i++) {
//利用函数变量的作用域和this关键字改变来用户调用方便
(function (item) {
//现在这个item被这个匿名函数 独享了 随便你怎么玩
item.dom.bind("click",function (e) {
//触发外部的函数
changFunc.apply(this, [{ title: item.title, id: item.id, itemObj: item.itemObj }, e]);
});
})(list[i]);
//下面是我之前 ie9留下的坏习惯 ie8 只能上面这种写法
//var item = list[i];
//item.dom.bind("click",function(){changFunc.apply(this,{title:item.title,id:item.id}) });
}
}
}
});
接下来就是 取css的环节了



下面是css代码
/* CSS Document */
*{ margin:; padding:; list-style:none;font-family: "Microsoft YaHei";}
table{ border-collapse:collapse; border-spacing:; }
a{ color:#686f7f; text-decoration:none; }
a:link, a:visited{ color:#2A72C5; text-decoration:none; }
a:active, a:hover{ color:#0065D9; text-decoration:underline; }
.clearer{ clear:both;}
/* single-select */
.single-select{ position:relative; display:inline-block; margin-right:5px; vertical-align:middle; cursor:pointer; *float:left; }
.single-select .boxwrap{ display:inline-block; vertical-align:middle; }
.single-select .select-tit{ position:relative; display:block; padding:5px 38px 5px 10px; min-width:40px; line-height:20px; height:20px; border:solid 1px #eee; text-decoration:none; background:#fff; white-space:nowrap; word-break:break-all; }
.single-select .select-tit span{ display:inline-block; color:#333; font-size:12px; vertical-align:middle; }
.single-select .select-tit i{ position:absolute; right:; top:; display:block; width:28px; height:100%; border-left:1px solid #eee; background:url(images/skin_icons.png) 7px -189px no-repeat #fafafa; }
.single-select .select-items{ display:none; position:absolute; left:; top:45px; /*overflow:hidden;*/ }
.single-select .select-items ul{ position:relative; padding:5px; min-width:120px; max-height:280px; border:1px solid #eee; background:#fff; overflow-y:auto; overflow-x:hidden; }
.single-select .select-items ul li{ display:block; padding:4px 10px; line-height:20px; font-size:12px; color:#666; white-space:nowrap; cursor:pointer; }
.single-select .select-items ul li:hover{ color:#fff; text-decoration:none; background:#16a0d3; }
.single-select .select-items ul li.selected{ color:#fff; background:#16a0d3; }
.single-select .arrow{ display:none; position:absolute; left:15px; top:35px; width:21px; height:11px; text-indent:-9999px; background:url(images/skin_icons.png) 0 -290px no-repeat; }
.single-select.up .select-items{ top:auto; bottom:45px; }
.single-select.up .arrow{ top:-13px; background:url(../images/skin_icons.png) 0 -300px no-repeat; }
后来发现里面有图片

background:url(images/skin_icons.png) 改成当前路径就ok了
完工就可以测试了
测试html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="combox/combox.css" rel="stylesheet" />
<script src="Js/jquery-1.7.2.min.js"></script>
<script src="combox/combox.js"></script>
<script>
$(window).ready(function () {
var com = new $.qyjcombox("#cm");
com.addItem("测试1", 1);
com.addItem("测试2", 2);
com.addItem("测试3", 3);
com.itemChangeEvent(function (data) {
alert("你单击了:"+data.title+" id:"+data.id);
});
});
</script>
</head>
<body>
<div id="cm"></div>
</body>
</html>
效果图 环境 360浏览器 内核 ie7

控件下载地址 :http://pan.baidu.com/s/1c0cxQ28
工具下载地址:http://pan.baidu.com/s/1qWC7lRu
jquery打造自定义控件(原创)的更多相关文章
- jQuery打造智能提示插件二(可编辑下拉框)
在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...
- Jquery打造的类似新浪微博@提醒功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【jQuery Demo】jQuery打造动态下滑菜单
作者:漫凯维奇 来源:[教程]jQuery打造动态下滑菜单 Tip:这只是一个转载,源代码可以在上面的来源博文中下载 此教程将分步讲解如何使用JQuery和CSS打造一个炫酷动感菜单.效果如 ...
- jQuery打造用户注册时获取焦点文本框出现提示jquery表单特效
jQuery打造用户注册时获取焦点文本框出现提示效果的jquery表单特效 当获取焦点时,会分别的弹出相应的信息提示框,失去焦点就会隐藏提示信息. 效果兼容性很高,适用浏览器:IE6.IE7.IE8. ...
- 基于jQuery打造的选项卡向上弹出jquery焦点图切换特效
基于jQuery打造的选项卡向上弹出jquery焦点图切换特效 鼠标经过标题栏,会出现层特效向上滑动,并且在同时进行幻灯片切换,效果十分不错. 有兴趣的童鞋可以下载看看,在IE6方面兼容性也不错,只有 ...
- 一款jQuery打造的滚动条在底部滑出信息提示层
一款jQuery打造的滚动条在底部滑出信息提示层, 当滚动鼠标滚轮,或者滚动条往下拉的时候,在右下角,弹出一个信息提示框. 有一点仿的是一个插件工具,就是网页中大家都长用到的友荐. 这款特效算一款简单 ...
- 基于jquery打造的网页右侧自动收缩浮动在线客服代码
基于jquery打造的网页右侧自动收缩浮动在线QQ客服代码, 当前比较流行的一款QQ在线jquery特效代码, 代码中还带有IE6下PNG图片透明的特效,如果想研究IE6下PNG透明的同学也可以下载研 ...
- HTML5+CSS3+JQuery打造自定义视频播放器
来源:http://www.html5china.com/HTML5features/video/201109206_1994.html 简介HTML5的<video>标签已经被目前大多数 ...
- 使用CSS3+JQuery打造自定义视频播放器
简介 HTML5的<video>标签已经被目前大多数主流浏览器所支持,包括还未正式发布的IE9也声明将支持<video>标签,利用浏览器原生特性嵌入视频有很多好处,所以很多开发 ...
随机推荐
- java之文件基本操作
java之文件基本操作 1 使用 BufferedReader 在控制台读取字符 public static void readChar() throws IOException{ char c; I ...
- 原创:跳坑指南——微信小程序真机预览跟本地不同的问题
微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:本地看不到数据,就先让本地能看到数据,再看本帖.... 1:本 ...
- App Widget
AppWidgetProviderInfo对象: 为App Widget提供元数据(描述数据的数据,如XML.关系型数据的表结构),包括布 局,更新频率等数据.这个对象被定义在XML文件当中: App ...
- Ajax 与 XmlHttpRequest
AJAX描述了确保Web应用在Web服务器请求新数据的情况下也能(几乎)实时反应的一种方法.具体地说,AJAX只是一些建立已久的技术的相互作用,从HTML.XHTML和HTTP,到JavaScript ...
- C#程序开发中经常遇到的10条实用的代码
1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...
- C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系
我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代 ...
- WPF DataGrid 鼠标双击选中的DataGridRow及Row数据
设置DataGrid的MouseDoubleClick事件 代码 //DataGrid鼠标双击事件 Private void dataGrid_MouseDoubleClick(object send ...
- C# 项目提交过程中感受
C# 项目提交过程中感受 新到一家互联网公司,昨天第一次提交代码,遇到了不少问题,而且大多数是代码格式问题,特此将范的错误记录下来,自我警示. 1. 代码对齐,这个虽然一直也都在注意,不过还是有一行代 ...
- Entity Framework 代码先行
一.什么是Code First 为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不 ...
- Java开发程序,使用编辑器编写创建Java项目、类
打开Eclipse 出现界面 工作空间的路径可以选择一个大空间的磁盘存放,点击确定: 创建:程序左上角-文件-新建-JAVA项目 输入项目名(项目名不能为中文),点击完成: 在 包资源管理器中点击 ...