一不小心写了个bootstrap风格下拉控件 JqueryUI + bootstrap
受够了EasyUI的封闭,Bootstrap虽然华丽但是功能太渣,闲着无聊写个下拉控件玩玩吧,不喜勿喷哈...
第一步:先设计下我的下拉控件的样子
1.既然是bootstrap风格的,我想应该是这样的

2.但是我想它应当可以输入,这样就可以支持模糊搜索,所以它应该是这样的

看样子还行。
第二步、代码实现
1.样式引入
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/themes/ls/jquery-ui.css" rel="stylesheet" />
2.js引入
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery-ui.js"></script>
3.自定义样式
/*Combox*/
.ui-autocomplete {
max-height: 130px;
overflow-y: auto;
/* prevent horizontal scrollbar */
overflow-x: hidden;
} .ui-menu {
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
} .lsCombo-panel {
min-height: 30px;
max-height: 130px;
background: #fff;
overflow-y: auto;
/* prevent horizontal scrollbar */
overflow-x: hidden;
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
border: 1px solid #ddd;
} .ls-combo-panel {
background: #fff;
height: 200px;
padding: 3px 12px;
overflow-y: auto;
border: 1px solid rgba(0,0,0,.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
z-index:;
} .ls-combo-panel .ls-combo-checkbox {
padding-left: 5px;
} .ls-combo-panel .ls-combo-checkbox li {
list-style: none;
padding-left:;
}
3.关键js代码
(function ($) {
$.ls = $.ls || {};
$.extend($.ls, {
isNullOrEmpty: function (v) {
return v == '' || v == undefined || v == null || typeof (v) == "undefined";
});
$.fn.extend({
lsCombox: function (parm, parm1, parm2) {
var defaults = {
remote: false,
url: '',
data: [],
valueField: 'value',
labelField: 'label',
onSelected: function (item) {
console.log(item);
}
};
var $combo = $(this);
var combId = $combo.attr('Id'),
hidId = combId + '_hid',
methods = {
getValue: function () {
return $("#" + hidId).val();
},
setValue: function (val) {
for (var i = 0, len = settings.data.length; i < len; i++) {
var d = settings.data[i];
if (d[settings.valueField] == val) {
$combo.val(d[settings.labelField]);
$("#" + hidId).val(d[settings.valueField]);
}
}
}
};
if (typeof (parm) === "string") {
return methods[parm](parm1, parm2);
}
var settings = $.extend({}, defaults, parm);
var btnBox = $('<span class="input-group-btn"></span>');
var btn = $('<button class="btn btn-default" type="button"><span class="caret"></span></button>')
.appendTo(btnBox)
.on('click', function () {
$combo.trigger("focus");
$combo.autocomplete("search", "");
})
var hidInput = $("<input type='hidden' id='" + hidId + "' />");
$combo.wrap("<div class='input-group'></div>")
.after(btnBox)
.after(hidInput);
$combo.autocomplete({
source: settings.data,
delay: 0,
minLength: 0,
position: { my: "right top", at: "right bottom" },
focus: function (event, ui) {
$combo.val(ui.item.label);
return false;
},
select: function (event, ui) {
$combo.val(ui.item.label);
hidInput.val(ui.item.value);
settings.onSelected(ui.item);
return false;
},
change: function (event, ui) {
//console.log(ui);
if ($.ls.isNullOrEmpty(ui.item))
hidInput.val("");
}
})
.autocomplete("instance")._renderItem = function (ul, item) {
return $("<li>")
.append("<div>" + item.label + "</div>")
.appendTo(ul);
};
//获取选中的值
this.getValue = function () {
return methods.getValue();
};
//设置选中
this.setValue = function (value) {
methods.setValue(value);
};
//初始化赋值
if (!$.ls.isNullOrEmpty($combo.val())) {
this.setValue($combo.val());
}
}
});
})(jQuery)
3.看下效果

4.使用
/*初始化数据*/
var page = {
Data :eval('('+'[{"label":"选项1","value":"16082718544406680","Id":"16082718544406680"},{"label":"选项2","value":"16083018573800680","Id":"16083018573800680"},{"label":"选项3","value":"16090410022900180","Id":"16090410022900180"},{"label":"选项4","value":"16090410024603660","Id":"16090410024603660"},{"label":"选项5","value":"16090410030206420","Id":"16090410030206420"}]'+')')
};
//初始化
$("#combo").lsCombox({ data: page.Data });
//赋值
$("#combo").lsCombox('setValue','1');
//取值
$("#combo").lsCombox('getValue');
<!--HTML-->
<input id="combo" placeholder="请选择" type="text" />
转载请注明出处:http://www.cnblogs.com/xinwang/p/6008629.html
一不小心写了个bootstrap风格下拉控件 JqueryUI + bootstrap的更多相关文章
- 基于bootstrap的multiple-select下拉控件使用
multiple-select是一款优秀的下拉菜单控件,能够支持单选和多选. 详细参考文档: JS组件系列——两种bootstrap multiselect组件大比拼 multiple-select ...
- scrollview嵌套下拉控件嵌套recyclerview(不动第三方原基础自定义)
相信会碰到很多类似的需求,一个列表控件,然后控件上方的一个头部需要自定义,这样就不好有时候也不能加在列表控件的头部了,那必须得嵌套一层scrollview了,没毛病,那么一般的列表控件都是有上拉下拉的 ...
- 下拉控件jQuery插件
由于后端开发需要一个下拉控件,能输入,能选择,于是自己写了一个 ;(function($,window,document,undefined){ function Select(el,opt){ th ...
- 使用谷歌提供的SwipeRefreshLayout下拉控件,并自定义实现下拉加载的功能
package com.loaderman.swiperefreshdemo; import android.os.Bundle; import android.os.Handler; import ...
- DevExpress控件GridView挂下拉控件无法对上值
下拉控件使用RepositoryItemLookUpEdit,加入如下事件进行处理. repositoryItemLookUpEdit1.CustomDisplayText += new DevExp ...
- 一个Bootstrap风格的分页控件
http://www.cnblogs.com/wangwei123/p/3682626.html 主题 jQueryBootstrap 一个Bootstrap风格的分页控件,对于喜欢Bootstr ...
- 解决easyUI下拉控件无法触发onkeydown事件
实现在combotree下拉控件中按Backspace键清除combotree选中的值 下面的代码无法获取到键盘事件 <input class="easyui-combotree&qu ...
- SDI在自定义的工具栏上添加下拉控件
0.首先到自己的工具条上新建一个控件,并命名新ID 1.拷贝FlatComboBox.h和FlatComboBox.cpp到工程目录下 2.建立新类 class CTrackerToolBar : p ...
- 下拉框、下拉控件之Select2。自动补全的使用
参考链接: 参考一:https://blog.csdn.net/weixin_36146275/article/details/79336158 参考二:https://www.cnblogs.com ...
随机推荐
- 《scraping with python》
记得刚开始学习python时就觉得爬虫特别神奇,特别叼,但是网上的中文资料大都局限于爬取静态的页面,涉及到JavaScript的以及验证码的就很少了,[当时还并不习惯直接找外文资料]就这样止步于设计其 ...
- ASP.NET的WebConfig
转:http://blog.csdn.net/q3498233/article/details/8137364 WebConfig 花了点时间整理了一下ASP.NET Web.config配置文件的基 ...
- Set Linux starts in multi-user mode as default.
ref: How to start Linux in multiuser mode rather than boot directly into XWindows (X11) steps: Log i ...
- OC - 10.使用Quartz2D绘制个性头像
效果图 将一张图片剪切成圆形 在图片周围显示指定宽度和颜色的边框 实现思路 效果图中主要由不同尺寸的两大部分组成 蓝色的背景区域,尺寸等于图片的尺寸加上边框的尺寸 图片区域,尺寸等于图片的尺寸 绘 ...
- ReetrantLock Synchronized Atomic的性能对比
之前看到了一篇帖子关于Lock和Synchronized的性能,写的是Lock比Synchronized的性能要好,可是,我试了下,结果却不是这样的,我所使用的JDK的版本是1.7,可能跟原帖作者用的 ...
- PHP简单计算器
工作之余,写着玩的. <?php $num1 = $_POST['num1']; $num2 = $_POST['num2']; $yusuan = $_POST['yusuan']; $jie ...
- [转]memmove函数
[FROM MSDN && 百科] 原型: void *memmove( void* dest, const void* src, size_tcount ); #include&l ...
- [转载]__type_traits
在STL中为了提供通用的操作而又不损失效率,我们用到了一种特殊的技巧,叫traits编程技巧.具体的来说,traits就是 通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性, ...
- Linux 4.1内核编译报告
编译环境 Arch Linux on VirtualBox 下载内核 https://www.kernel.org/ 下载的内核压缩包,此时的最新内核版本为4.1: 解压包 # tar -xvJf l ...
- 使用gdb调试(转: http://www.cnblogs.com/luchen927/archive/2012/02/07/2339003.html)
一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...