其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件。

既然是jQuery插件,那么必然是依赖jQuery的了。

老规矩,直接上代码吧!

;(function () {
$.fn.extend({
dropdown:function (options) {
return this.each(function (i, val) {
$(val).css("position", "relative");
var oThis = $(this);
// 设置默认参数
var opts = $.extend({
color: "#0a96d4",
items: [
{key1: "选项一"},
{key2: "选项二"},
{key3: "选项三"},
{key4: "选项四"},
{key5: "选项五"}
],
initialVal: "请选择",
callback: function () { }
}, options); // 创建默认选择--请选择
var $defaultVal = $("<p class='item'></p>").html(opts.initialVal).appendTo($(this));
oThis.data("val", opts.initialVal); // 创建选择项
var $items = $("<ul class='menu-options'></ul>"); $(this).append($items);
// 为每一个选择项添加属性 如果是对象类型,则添加key作为属性,如果就是字符串的话,直接既当做属性,也当做内容添加
$.each(opts.items, function (index, item) {
if (typeof item == "string" || typeof item == "number") {
var oLi = $("<li></li>").html(item).attr("data-val", item).appendTo($items);
if (opts.initialVal == item) oLi.addClass("active");
} else if (typeof item == "object") {
for (var key in item) {
var oLi = $("<li></li>").html(item[key]).attr("data-val", key).appendTo($items);
if (opts.initialVal == item[key]) oLi.addClass("active");
}
}
}); $defaultVal.on("click", function (ev) {
ev.stopPropagation();
$(".open").not(this).trigger("click");
$(this).toggleClass("open");
$(this).hasClass("open") ? $(this).next().slideDown() : $(this).next().slideUp()
}); // 选择项的点击事件
$items.on("click", "li", function (ev) {
ev.stopPropagation();
var $this = $(this);
$(this).addClass("active").css("backgroundColor", opts.color).siblings().removeClass("active").css("backgroundColor", $this.parent().css("backgroundColor"));
opts.callback();
$this.parent().slideUp(function () {
$this.parent().prev("p").html($this.html()).add(oThis).attr("data-val", $this.attr("data-val")).removeClass("open");
}); });
// 点击空白部分,关闭下拉选择框
$(window).on("click", function () {
if ($defaultVal.hasClass("open")) {
$defaultVal.trigger("click");
}
})
});
}
})
})(jQuery);

  页面上比较干净:  

<div class="dropdown"></div>

  js部分属于直接调用dropload方法即可:

    $(".dropdown").dropdown({
color: "#f0f",
items: [
{"shucai": "青菜"},
{"shuiguo": "葡萄"},
{"food": "面包"}
],
callback: function () {
console.log($(this))
}.bind($(".dropdown"))
});

  items数组内容也可以直接是多个字符串,如: ["苹果", "水蜜桃", "哈密瓜"]

jQuery插件——下拉选择框的更多相关文章

  1. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. FancySelect – 更好用的 jQuery 下拉选择框插件

    FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...

  3. jquery.chosen.js下拉选择框美化插件项目实例

    由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...

  4. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  5. CSS3不一样的下拉选择框

    本例中包含两个下拉选择框的动画示例,本例中并未使用select标签.本例中第一个案例也可用于标题.导航栏等位置. 案例一: html布局 <div class="content&quo ...

  6. CSS自定义select下拉选择框(不用其他标签模拟)

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  7. combobox级联检索下拉选择框

    1.效果图 2.前端 @{ ViewBag.Title = "Index"; Layout = null; @*自动筛选下拉框*@ <script src="~/S ...

  8. select2 智能补全模糊查询select2的下拉选择框使用

    我们在上篇文章中已经在SpringMVC基础框架的基础上应用了BootStrap的后台框架,在此基础上记录select2的使用. 应用bootstrap模板 基础项目源码下载地址为: SpringMV ...

  9. java、easyui-combotree树形下拉选择框

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...

随机推荐

  1. 编译NDK的source code一定要用release mode!

    编译NDK的source code一定要用release mode! 编译NDK的source code一定要用release mode! 编译NDK的source code一定要用release m ...

  2. vue-clil的快速搭建vue项目

    1.npm i vue-cli -g 全局安装 2.vue init webpack myProject 3.cd myProject 4.npm i 稍等片刻 完成运行下一步 5.npm run d ...

  3. RTB业务知识之2-Open-RTB全景

    一.前言 openrtb是一套开源的竞价广告系统,来自IAB的贡献,非常好.有非常多的值得借鉴的地方,最近基于其所提供sdk api接口文档介绍,整理了相关的资料.主要包括其生态图体系.业务流程和主要 ...

  4. pytest.3.Assert

    From: http://www.testclass.net/pytest/assert/ Assert就是断言,每个测试用例都需要断言. 与unittest不同,pytest使用的是python自带 ...

  5. 关于Zookeeper选举机制

    zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服 ...

  6. 25天javaweb基础

    第一天(html) 表格标签,超链接标签,图片标签,排版标签,列表标签 第二天(css) 表单标签 第三天(JS) js语法 定时器(系统对象的定时器setinterval,js的定时器seTimeo ...

  7. Java NIO系列教程(五)Buffer

    Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被 ...

  8. python 数组或列表维度增加

    怎么把[,,,,]变成[[],[],[],[],[]]???

  9. [转][Centos]常用命令之:ls和cd

    来自:https://www.cnblogs.com/zerotomax/p/7224927.html ls 类似于 dir 在使用centos这个linux系统的时候,我们总是免不了需要查看当前目录 ...

  10. Scrapy学习篇(三)之创建项目和Scrapy的安装

    安装Scrapy 了解了Scrapy的框架和部分命令行之后,创建项目,开始使用之前,当然是安装Scrapy框架了. 关于Scrapy框架的安装,请参考:https://cuiqingcai.com/5 ...