抛掉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()会在继续之前等待,查看下一个 ...
随机推荐
- 浅谈javascript性能-管理内存
上次说到,javascript脚本到底应该放在哪里?用什么用处? 以下2点: 在Html.Body部分中的JS会在页面加载的时候执行.即-用户触发一个事件的时候执行的脚本.eg:onload事件... ...
- 【solr这四个主题】在Tomcat 部署Solr4.x
1.安装Tomcat (1)下载并解压缩到/opt/tomcat在 # cd /opt/jediael # tar -zxvf apache-tomcat-7.0.54.tar.gz # mv apa ...
- navigator,JS检测浏览器插件
最早由Netscape Navigator 2.0引入的navigator对象,现在已经成为识别客户端浏览器的事实标准.虽然其它浏览器也通过其它方式提供了相同或相似的信息(例如,IE中的window. ...
- 清除css、javascript及背景图在浏览器中的缓存
在实际项目开发过过程中,页面是上传到服务器上的.而为了减少服务器的压力,让用户少加载,浏览器会将图片.css.js缓存到本地中,以便下次访问网站时使用.这样做不仅减少了服务器的压力,并且也减少了用户的 ...
- SQL点滴29—错误无处不在
原文:SQL点滴29-错误无处不在 我只想说以下是很基础的sql知识,但是很容易犯错.所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧! 案例1if not exists (select OrderI ...
- HDU 2064 汉诺塔III
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- JSON解析之Json-lib
1.Json-lib介绍 Json-lib是一个java类库,它用于把beans, maps, collections, java arrays and XML 传递给一个Json,或者返回来把Jso ...
- 更新部分字段 NHibernate
更新部分字段 NHibernate 概述: 在有些情况下,我只想更新记录中的一个字段的值.比如:浏览完这条记录后,我把其中的是否浏览置为1. Nhibernate中提供了Native SQL,其中有一 ...
- JS中的prototype(转载)
在研究别人写的js图像处理算法时,发现其中脚本中大量使用prototype,很难读明白,就网上查了下资料发现这篇文章很易懂,就转载如下: 1 原型法设计模式 在.Net中可以使用clone()来实现原 ...
- openGL绘制正方形
/** * 缓冲区工具类 */public class BufferUtil { /** * 将浮点数组转换成字节缓冲区 */ public static ByteBuffer arr2ByteB ...