本人第一次发表文章,不足之出请大家多多包涵

下面是一个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打造自定义控件(原创)的更多相关文章

  1. jQuery打造智能提示插件二(可编辑下拉框)

    在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...

  2. Jquery打造的类似新浪微博@提醒功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 【jQuery Demo】jQuery打造动态下滑菜单

    作者:漫凯维奇      来源:[教程]jQuery打造动态下滑菜单 Tip:这只是一个转载,源代码可以在上面的来源博文中下载 此教程将分步讲解如何使用JQuery和CSS打造一个炫酷动感菜单.效果如 ...

  4. jQuery打造用户注册时获取焦点文本框出现提示jquery表单特效

    jQuery打造用户注册时获取焦点文本框出现提示效果的jquery表单特效 当获取焦点时,会分别的弹出相应的信息提示框,失去焦点就会隐藏提示信息. 效果兼容性很高,适用浏览器:IE6.IE7.IE8. ...

  5. 基于jQuery打造的选项卡向上弹出jquery焦点图切换特效

    基于jQuery打造的选项卡向上弹出jquery焦点图切换特效 鼠标经过标题栏,会出现层特效向上滑动,并且在同时进行幻灯片切换,效果十分不错. 有兴趣的童鞋可以下载看看,在IE6方面兼容性也不错,只有 ...

  6. 一款jQuery打造的滚动条在底部滑出信息提示层

    一款jQuery打造的滚动条在底部滑出信息提示层, 当滚动鼠标滚轮,或者滚动条往下拉的时候,在右下角,弹出一个信息提示框. 有一点仿的是一个插件工具,就是网页中大家都长用到的友荐. 这款特效算一款简单 ...

  7. 基于jquery打造的网页右侧自动收缩浮动在线客服代码

    基于jquery打造的网页右侧自动收缩浮动在线QQ客服代码, 当前比较流行的一款QQ在线jquery特效代码, 代码中还带有IE6下PNG图片透明的特效,如果想研究IE6下PNG透明的同学也可以下载研 ...

  8. HTML5+CSS3+JQuery打造自定义视频播放器

    来源:http://www.html5china.com/HTML5features/video/201109206_1994.html 简介HTML5的<video>标签已经被目前大多数 ...

  9. 使用CSS3+JQuery打造自定义视频播放器

    简介 HTML5的<video>标签已经被目前大多数主流浏览器所支持,包括还未正式发布的IE9也声明将支持<video>标签,利用浏览器原生特性嵌入视频有很多好处,所以很多开发 ...

随机推荐

  1. IO多路复用之poll总结

    1.基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制.poll和selec ...

  2. jQuery-1.9.1源码分析系列(五) 回调对象

    jQuery.Callbacks()提供的回调函数队列管理本来是延时回调处理的一部分,但是后面将其独立出来作为一个模块.jQuery就是这样,各个模块间的代码耦合度是处理的比较好的,值得学习.虽然是从 ...

  3. javabean和jsp动作元素

    model1就是利用了jsp和javabean 的组合来处理问题.jsp页面如果有太多的逻辑代码的话,维护起来和扩展起来是相当的麻烦的.所以jsp的逻辑代码部分都打包到一种java类当中进行编写.这种 ...

  4. ym—— Android网络框架Volley(体验篇)

    VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  5. SharedPreferences漏洞, 无法避免,所以不要在里面存储敏感信息

     1. SharedPreferences漏洞, 无法避免,所以不要在里面存储敏感信息2. 数据存储检测,content://com.starcor.launcherInfo/deviceInfo&q ...

  6. JSP利用Hibernate实现对数据库的CRUD ——开发环境Myeclipse与SQL Server 2008

    一.首先先建立一个Web Project 二.然后在程序根目录建立文件夹“DataBase”和“Doc”,分别存放数据库文件和保存SQL语句,建完如下所示: 三.建立数据库“dbHibernate”, ...

  7. Atitit.提升 升级类库框架后的api代码兼容性设计指南

    Atitit.提升 升级类库框架后的api代码兼容性设计指南 1. 增加api直接增加,版本号在注释上面增加1 2. 废弃api,使用主见@dep1 3. 修改api,1 4. 修改依赖import, ...

  8. kmdjs api reference

    总览 kmdjs的主要就两个API:kmdjs.config和define kmdjs.config kmdjs.config是用于项目整体配置,一般的配置如下所示: kmdjs.config({ n ...

  9. EF 分页查询优化

    按照通常的方式分页查询至少要查询数据两遍,一个操作是查询总数,另一个是查询数据,这样有些耗时 这里介绍一个基于EF的插件 EntityFramework.Extended,当然这个插件有很多的功能,比 ...

  10. 深入了解 Authorize 和 AllowAnonymous

    深入了解 Authorize 和 AllowAnonymous Chapter 0 - Intro 最近做的一个项目的时候,自定义授权 Attribute 来区分用户权限,我的项目不太大,权限控制也不 ...