抛掉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()会在继续之前等待,查看下一个 ... 
随机推荐
- Winform: use the WebBrowser to display XML with xslt, xml, xslt 转 html 字符串
			原文:Winform: use the WebBrowser to display XML with xslt, xml, xslt 转 html 字符串 声明xml字符串: string xml = ... 
- Appium根据xpath获取控件实例随笔
			如文章<Appium基于安卓的各种FindElement的控件定位方法实践>所述,Appium拥有众多获取控件的方法.其中一种就是根据控件所在页面的XPATH来定位控件. 本文就是尝试通过 ... 
- Wowza流媒体Live直播和VOD点播配置实战
			Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ... 
- installshield 32位打包和64位打包的注意事项
			原文:installshield 32位打包和64位打包的注意事项 32/64位问题要把握几点:1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解In ... 
- How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数)
			原文:How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数) IS里调用外部文件的时候,一般都是用LaunchAppAndWait函数,比 ... 
- 注意,WebDeploy服务会占用80端口。(Windows关闭了IIS,80端口任然被占用)
			最近遇到一个很奇怪的事情,Windows上的 IIS 网站 全关掉了,80端口仍然被占用.然后我新装了一台服务器,一个一个组件地装,装一个测一次,最后发现,WebDeploy这个组件,会占用80端口. ... 
- jquery+html三级联动下拉框及详情页面加载时的select初始化问题
			html写的三个下拉框,如下: <select name="ddlQYWZYJ" id="ddl_QYWZYJ" class="fieldsel ... 
- 【Android开发日记】妙用 RelativeLayout 实现3
段布局
			在设计过程中,我们经常会遇到这样的需求: 把一条线3控制,左对齐左控制,右侧控制右对齐,中间控制,以填补剩余空间. 或者一列内放3个控件,上面的与顶部对齐,以下的沉在最底部,中间控件是弹性的.充满剩余 ... 
- hdu 1059 Dividing 多重背包
			点击打开链接链接 Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ... 
- Hibernate进化史-------Hibernate概要
			一个.Hibernate概要 什么是Hibernate呢?首先,Hibernate是数据持久层的一个轻量级框架.实现了ORMapping原理(Object Relational Mapping). 在 ... 
