抛掉kendoUI的MultiSelect,自己实现 DropDownList MultiSelect
我们首先来看下kendoUI官方的下拉框多选:

再来看看telerik RadControls的下拉框多选:

很明显从展现形式上来看,第二种是优于第一种的,至少我是这么认为的 :-)
那我们就对DropDownList 进行扩展吧。在这里顺便提一个知识点,jQuery为开发插件提拱了两个方法:
jQuery.fn.extend(object) 和jQuery.extend(object)
至于他们的区别和使用,可以看看园友的这篇文章,
http://www.cnblogs.com/wyjgreat/archive/2011/07/19/2110754.html
言归正传,继续完成刚刚要做的事情吧 :)
(function ($) {
var kendo = window.kendo,
ui = kendo.ui,
DropDownList = ui.DropDownList;
var MultiSelectBox = DropDownList.extend({
init: function (element, options) {
options.template = kendo.template(
kendo.format('<input type="checkbox" /><span data-value="#= {0} #">#= {1} #</span>',
options.dataValueField,
options.dataTextField
)
);
DropDownList.fn.init.call(this, element, options);
},
options: {
name: "MultiSelectBox",
index: -
},
_focus: function (li) {
var that = this
if (that.popup.visible() && li && that.trigger("select", { item: li })) {
that.close();
return;
}
that._select(li);
},
_select: function (li) {
var that = this,
current = that._current,
data = that._data(),
value,
text,
idx;
li = that._get(li);
if (li && li[]) {
idx = ui.List.inArray(li[], that.ul[]);
if (idx > -) {
//获取元素li中checkbox被选中的项
var selecteditems = $(that.ul[]).find("input:checked").closest("li");
value = [];
text = [];
$.each(selecteditems, function (indx, item) {
var obj = $(item).children("span").first();
value.push(obj.attr("data-value"));
text.push(obj.text());
});
that.text(text.join(", "));
that._accessor(value !== undefined ? value : text, idx);
}
}
},
value: function (value) {
var that = this,
idx,
valuesList = [];
if (value !== undefined) {
if (!$.isArray(value)) {
valuesList.push(value);
}
else {
valuesList = value;
}
$.each(valuesList, function (indx, item) {
if (item !== null) {
item = item.toString();
}
that._valueCalled = true;
if (item && that._valueOnFetch(item)) {
return;
}
idx = that._index(item);
that.select(idx > - ? idx : );
});
}
else {
return that._accessor();
}
}
});
ui.plugin(MultiSelectBox);
})(jQuery);
而我们在使用的时候就像使用kendoUI其他控件一样
<script type="text/javascript">
$(document).ready(function () {
var data = [
{ Text: "Test1", Value: "" },
{ Text: "Test2", Value: "" },
{ Text: "Test3", Value: "" },
{ Text: "Test4", Value: "" }
];
$("#multiselect").kendoMultiSelectBox({
dataTextField: "Text",
dataValueField: "Value",
dataSource: data
});
});
</script>
<input id="multiselect" />
效果如下:

网上也有个解决方案,但它在使用的时候已不像kendoUI控件那样使用了,所以不推荐,倒是可以看看http://jsfiddle.net/bDvkQ/
抛掉kendoUI的MultiSelect,自己实现 DropDownList MultiSelect的更多相关文章
- Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)
刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多 ...
- bootstrap multiselect两大组件
组件说明以及API 1.第一个组件——multiple-select.这个组件风格简单.文档全.功能强大.但是觉得它选中的效果不太好.关于它的效果展示,我们放在后面. 2.第二个组件——bootstr ...
- js:jquery multiSelect 多选下拉框实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Bootstrap Multiselect 设置 option
$.ajax({ type: 'post', url: "helper/ajax_search.php", data: {models: decodeURIComponent(br ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- 如何理解 卷积 和pooling
转自:http://blog.csdn.net/malefactor/article/details/51078135 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了 ...
- iOS---后台运行机制详解
一.iOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking b ...
- Jesse Livermore的21句投机至理名言
1.优秀的投机家们总是在等待,总是有耐心,等待着市场证实他们的判断.要记住,在市场本身的表现证实你的看法之前,不要完全相信你的判断. 2.要想在投机中赚到钱,就得买卖一开始就表现出利润的 ...
- Java网络编程之流——readline()方法的bug
readline()方法有一个隐含的bug,它不一定会把一个回车看作行的结束.相反,readline()只识别换行或回车/换行对.当在流中检测到回车时,readline()会在继续之前等待,查看下一个 ...
随机推荐
- 抄360于Launcher浮动窗口的屏幕显示内存使用情况(改进版)
MainActivity例如下列: package cc.cc; import android.os.Bundle; import android.view.View; import android. ...
- Hadoop-2.4.1学习之Writable及事实上现
Hadoop基于DataInput和DataOutput实现了简单.高效的序列化协议,而Writable接口定义了Hadoop序列化的方法,MapReduce框架中的不论什么键值类型都实现了该接口,比 ...
- 6、Cocos2dx 3.0游戏开发的基本概念找个小三场比赛
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...
- Ionic项目中使用极光推送
Ionic项目中使用极光推送-android 对于Ionic项目中使用消息推送服务,Ionic官方提供了ngCordova项目,这个里面的提供了用angularjs封装好的消息推送服务(官方文档) ...
- MVC验证12-使用DataAnnotationsExtensions对整型、邮件、最小值、文件类型、Url地址等验证
原文:MVC验证12-使用DataAnnotationsExtensions对整型.邮件.最小值.文件类型.Url地址等验证 本文体验来自http://dataannotationsextension ...
- android学习8(ListView高级使用)
ListView在android更开放的,于是继续ListView说明使用. 首先创建一个android项目,项目名为ListViewTest. ListView的简单使用 改动布局文件,改动后代码例 ...
- java设计模式之九外观模式(Facade)
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口 ...
- hdu149850 years, 50 colors (多个最小顶点覆盖)
50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- OpenCV2第一个马拉松8环——画一个柱状图
在包里 灰度直方图 彩色直方图 葵花宝典 直方图的理论还是非常丰富的,应用也非常多,诸如: 直方图均衡化 直方图匹配(meanshift,camshift) 在这里,我先介绍基础.怎样绘制图像的直方图 ...
- Solr多核心及分词器(IK)配置
Solr多核心及分词器(IK)配置 多核心的概念 多核心说白了就是多索引库.也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索 ...