自写Jquery插件 Combobox
原创文章,转载请注明出处,https://www.cnblogs.com/GaoAnLee/p/9092421.html
上效果
html
<span id='combobox' class='combobox'>城市</span>
<span id='combobox1' class='combobox'>城市</span>
css
@CHARSET "UTF-8";
body, html {
height: 100%;
} ul, li {
list-style: none;
} .combobox {
-webkit-border-radius: 5px 5px;
-moz-border-radius: 5px 5px;
-ms-border-radius: 5px 5px;
-o-border-radius: 5px 5px;
border-radius: 5px 5px;
display: inline-block;
} .combobox+i, #dropdown-list {
position: absolute;
} .combobox, #dropdown-list {
border: 1px solid #AAAAAA;
} .combobox, #dropdown-list>li {
text-align: left;
padding: 0 10px;
} .combobox, .combobox+i, #dropdown-list>li {
cursor: pointer;
font-size: 13px;
} #dropdown-list {
display: none;
} #dropdown-list>li {
color: #ffffff;
background-color: #42485b;
display: block;
}
jquery.combobox.js
/*
* combobox
* authoer:GaoAnLee
* <b id='combobox'></b>
*/
;
(function($, window, document, undefined) {
function _init(combobox, b, options) {
var _this = combobox.element;
var obj = document.getElementById(options.id);
var r = new Array();
if (b) {
_this.css('width', options.width).css('height', options.height).css('line-height', options.height + 'px');
r['x'] = _this.position().top;
r['y'] = _this.position().left;
var t = {
'height': _this.outerHeight(),
'width': _this.outerWidth()
};
_this.parent().css('position', 'relative');
_this.after('<i class=\"fa fa-caret-down dropdown-icon\"></i>');
$(options.combobox).next().css('left', r['y'] + t.width - 30).css('top', r['x'] + 8);
warpList(options, r, t);
}
actions(options);
} function warpList(options, r, t) {
var len = options.list.length;
var buffer = '';
buffer += '<ul id=\"dropdown-list\">';
for (var i = 0; i < len; i++) {
buffer += '<li>' + options.list[i] + '</li>';
}
buffer += '</ul>';
$(options.combobox).next().after(buffer);
$(options.combobox).next().next().css('left', r['y'] + 2).css('top', r['x'] + t.height - 1);
$(options.combobox).next().next().children('li').css('width', options.width + 1).css('height', options.height).css('line-height', options.height + 'px');
} function actions(options) {
$(options.combobox).on('click', function(event) {
var value = $(options.combobox).next().next().css('display');
if (value == 'block') {
$(options.combobox).css('border-radius', '5px 5px 5px 5px');
$(options.combobox).next().next().slideUp('fast');
} else {
$(options.combobox).css('border-radius', '5px 5px 0 0');
$(options.combobox).next().next().slideDown('fast');
}
event.stopPropagation(); //关键在于阻止冒泡
});
$(options.combobox).next().on('click', function(event) {
var value = $(options.combobox).next().next().css('display');
if (value == 'block') {
$(options.combobox).css('border-radius', '5px 5px 5px 5px');
$(options.combobox).next().next().slideUp('fast');
} else {
$(options.combobox).css('border-radius', '5px 5px 0 0');
$(options.combobox).next().next().slideDown('fast');
}
event.stopPropagation(); //关键在于阻止冒泡
});
$(options.combobox).next().next().on('mouseover', 'li', function() {
$(this).css('background-color', '#00C1DE');
});
$(options.combobox).next().next().on('mouseout', 'li', function() {
$(this).css('background-color', '#42485b');
});
$(options.combobox).next().next().on('click', 'li', function() {
var value = $(this).html();
$(options.combobox).html(value);
$(options.combobox).next().next().slideUp('fast');
});
$(document).on('click', function() {
$(options.combobox).css('border-radius', '5px 5px 5px 5px');
$(options.combobox).next().next().slideUp('fast');
});
}
var Combobox = function(e, options) {
this.element = e,
this.defaults = {
width: 100,
height: 30,
combobox: '#combobox',
id: 'combobox'
},
this.options = $.extend({}, this.defaults.options);
};
Combobox.prototype = { };
$.fn.myCombobox = function(target, parm) {
var combobox = new Combobox(this, target);
var options = {};
if (typeof target == 'string' && typeof parm == 'string') {
return combobox[target](parm);
}
if (typeof target == 'string' && typeof parm == 'object') {
options = $.extend({}, combobox.defaluts, parm);
return combobox[target](options);
}
var state = $.data(this, target.id);
if (state) {
options = $.extend({}, state.options, target);
} else {
options = $.extend({}, combobox.defaluts, target);
}
$.data(this, target.id, {
options: options
});
this.each(function() {
_init(combobox, true, options);
});
};
})(jQuery, window, document); $(function() {
var list = ['北京', '上海', '深圳', '广州', '厦门', '杭州', '成都', '重庆'];
$('#combobox').myCombobox({
list: list, //必填
width: 100,
height: 30,
combobox: '#combobox', //必填
id: 'combobox' //必填
}); //加载启动
$('#combobox1').myCombobox({
list: list, //必填
width: 100,
height: 30,
combobox: '#combobox1',
id: 'combobox1'
}); //加载启动 });
自写Jquery插件 Combobox的更多相关文章
- 自己写jquery插件之模版插件高级篇(一)
需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...
- 写JQuery插件的基本知识
普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...
- [原创作品]手把手教你怎么写jQuery插件
这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...
- 写jQuery插件时,一种更好的合并参数的方法
看到很多人写jQuery插件时居然这样合并参数: this.defaults = { 'color': 'red', 'fontSize': '12px', 'textDecoration':'non ...
- 写JQuery 插件
什么?你还不会写JQuery 插件 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再 ...
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
1.表单验证插件Validation 2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuer ...
- 什么?你还不会写JQuery 插件
前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论 ...
- 写JQuery 插件 什么?你还不会写JQuery 插件
http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...
- 第一次写jquery插件,来个countdown计时器吧
之前同学做个购物商城秒杀活动需要计时器的功能,在用jquery提供的countdown插件时,一直报错,貌似还需要依赖除jquery之外的其他插件,搞了半天也没搞成功,就叫我帮忙写个.然而我并没有写过 ...
随机推荐
- XML 文档(1, 2)中有错误:不应有 <xml xmlns=''>
症状 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...
- 【SVM、决策树、adaboost、LR对比】
一.SVM 1.应用场景: 文本和图像分类. 2.优点: 分类效果好:有效处理高维空间的数据:无局部最小值问题:不易过拟合(模型中含有L2正则项): 3.缺点: 样本数据量较大需要较长训练时间:噪声不 ...
- javaScript 数组迭代方法
map 方法 解释:map即映射,返回对每项操作后组成的新数组 let arr=[1,2,3,4,5,6,7,8]; let newArr=arr.map((item)=>{ if(item&g ...
- VS Code的golang开发配置 之 代码提示
之前用VS Code的时候,发现自己的代码的提示一直不好,换用JetBrain的Goland的代码提示是好了,但是比较占用资源.在网上找了一些资料,发现很多人也是遇到第三方或者自己的代码无法提示的情况 ...
- 家庭记账本之GitHub账号注册与安装(一)
账号注册 1.github是世纪上最大的开源代码托管网站.因为是国外网站,很多人在注册的时候因为不熟悉英语而犯了难. 2.百度搜索github进入官网.如果你已经有账号密码,那么点击右上角的sign ...
- iOS 设计模式-NSNotificationCenter 通知中心
通知介绍 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发布通知(NSNotification),描述 ...
- Oracle之SQL优化专题02-稳固SQL执行计划的方法
首先构建一个简单的测试用例来实际演示: create table emp as select * from scott.emp; create table dept as select * from ...
- spring mvc配置datasource数据源的三种方式
2.使用org.apache.commons.dbcp.BasicDataSource 说明:这是一种推荐说明的数据源配置方式,它真正使用了连接池技术 <bean id="dataSo ...
- Thinkphp 3.2 验证码图片显示错误解决方法
在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify-& ...
- python 定义函数 两个文件调用函数
在def_function.py文件里面写 #coding=utf-8 #定义函数 def hello(): print "hello world" 在test.py里面调用 #c ...