我们首先来看下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的更多相关文章

  1. Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)

    刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多 ...

  2. bootstrap multiselect两大组件

    组件说明以及API 1.第一个组件——multiple-select.这个组件风格简单.文档全.功能强大.但是觉得它选中的效果不太好.关于它的效果展示,我们放在后面. 2.第二个组件——bootstr ...

  3. js:jquery multiSelect 多选下拉框实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Bootstrap Multiselect 设置 option

    $.ajax({ type: 'post', url: "helper/ajax_search.php", data: {models: decodeURIComponent(br ...

  5. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  6. 如何理解 卷积 和pooling

    转自:http://blog.csdn.net/malefactor/article/details/51078135 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了 ...

  7. iOS---后台运行机制详解

    一.iOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking b ...

  8. Jesse Livermore的21句投机至理名言

    1.优秀的投机家们总是在等待,总是有耐心,等待着市场证实他们的判断.要记住,在市场本身的表现证实你的看法之前,不要完全相信你的判断.        2.要想在投机中赚到钱,就得买卖一开始就表现出利润的 ...

  9. Java网络编程之流——readline()方法的bug

    readline()方法有一个隐含的bug,它不一定会把一个回车看作行的结束.相反,readline()只识别换行或回车/换行对.当在流中检测到回车时,readline()会在继续之前等待,查看下一个 ...

随机推荐

  1. 浅谈javascript性能-管理内存

    上次说到,javascript脚本到底应该放在哪里?用什么用处? 以下2点: 在Html.Body部分中的JS会在页面加载的时候执行.即-用户触发一个事件的时候执行的脚本.eg:onload事件... ...

  2. 【solr这四个主题】在Tomcat 部署Solr4.x

    1.安装Tomcat (1)下载并解压缩到/opt/tomcat在 # cd /opt/jediael # tar -zxvf apache-tomcat-7.0.54.tar.gz # mv apa ...

  3. navigator,JS检测浏览器插件

    最早由Netscape Navigator 2.0引入的navigator对象,现在已经成为识别客户端浏览器的事实标准.虽然其它浏览器也通过其它方式提供了相同或相似的信息(例如,IE中的window. ...

  4. 清除css、javascript及背景图在浏览器中的缓存

    在实际项目开发过过程中,页面是上传到服务器上的.而为了减少服务器的压力,让用户少加载,浏览器会将图片.css.js缓存到本地中,以便下次访问网站时使用.这样做不仅减少了服务器的压力,并且也减少了用户的 ...

  5. SQL点滴29—错误无处不在

    原文:SQL点滴29-错误无处不在 我只想说以下是很基础的sql知识,但是很容易犯错.所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧! 案例1if not exists (select OrderI ...

  6. HDU 2064 汉诺塔III

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. JSON解析之Json-lib

    1.Json-lib介绍 Json-lib是一个java类库,它用于把beans, maps, collections, java arrays and XML 传递给一个Json,或者返回来把Jso ...

  8. 更新部分字段 NHibernate

    更新部分字段 NHibernate 概述: 在有些情况下,我只想更新记录中的一个字段的值.比如:浏览完这条记录后,我把其中的是否浏览置为1. Nhibernate中提供了Native SQL,其中有一 ...

  9. JS中的prototype(转载)

    在研究别人写的js图像处理算法时,发现其中脚本中大量使用prototype,很难读明白,就网上查了下资料发现这篇文章很易懂,就转载如下: 1 原型法设计模式 在.Net中可以使用clone()来实现原 ...

  10. openGL绘制正方形

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...