一款不错的多选下拉列表利器—— Ext.ux.form.SuperBoxSelect
在B/S系统中,下拉列表(select/dropdownlist/combobox)的应用随处可见,为了增强用户体验,开发人员也常常会做一些带联想功能的下拉列表,
特别是数据项比较多的时候,用户筛选起来就会很容易。
如果考虑多选的场景,我想以下的实现方式很多时候是能够满足要求的:

带复选框(checkbox)的下拉列表,应该是比较直观和方便了,也很符合用户的习惯.
但是如果数据项太多的时候。滚动条会很长,有两个不足:
1.用户查询自己想要的目标很困难;
2.用户如果需要选择的项很多(>10项),滚动条容易遮挡住,用户可能也不知道自己到底选了哪些。
于是带复选框且有联想功能的多选下拉列表闪亮登场了, Ext.ux.form.SuperBoxSelect
这款插件确实很好用,笔者也将其应用到了项目中
这里给出测试截图




用户选择之后可以看到自己所选,很直观吧!
插件下载地址:
Live example: http://technomedia.co.uk/SuperBoxSelect/examples3.html
Download: http://www.extjs.com/forum/attachmen...7&d=1263783379
Thread: http://extjs.com/forum/showthread.ph...654#post332654
怎么使用这个插件,我想示例中是很明了的,笔者也做了一个C#版的
ExtJs组件的基础引用都在母板中
ExtMaster.Master
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="ExtMaster.master.cs"
Inherits="Lucky.Views.Shared.ExtMaster" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="../../Scripts/ext-3.4.0/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/ext-3.4.0/adapter/ext/ext-base-debug.js" type="text/javascript"></script>
<script src="../../Scripts/ext-3.4.0/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="../../Scripts/ext-3.4.0/ext-all.js" type="text/javascript"></script>
<script src="../../Scripts/Widget/CHelper.js" type="text/javascript"></script> <asp:ContentPlaceHolder ID="TitleContent" runat="server">
</asp:ContentPlaceHolder> </head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Vew视图:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ExtMaster.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <link href="../../Scripts/SuperBoxSelect/superboxselect.css" rel="stylesheet" type="text/css" />
    <script src="../../Scripts/SuperBoxSelect/states.js" type="text/javascript"></script>
    <script src="../../Scripts/SuperBoxSelect/SuperBoxSelect.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <style type="text/css">
    body {
        font:13px/1.3 arial,helvetica,clean,sans-serif;
        *font-size:small;
        *font:x-small;
        padding: 20px !important;
    }
    #page {
        width: 700px;
    }
    p {
        color: #333;
        margin-bottom: 7px;
        font-size: 14px;
    }
    form p {
        margin-top: 7px;
    }
    code {
        color: #000;
    }
    #intro p {
        color: #000;
        font-size: 15px;
        margin-bottom: 20px;
    }
    h1 {
        font-size: 1.6em;
        line-height: 2.0em;
        margin-bottom: 0.8em;
    }
    h2 {
        font-size: 1.2em;
        line-height: 1.6em;
        margin-bottom: 0.6em;
    }
    .exForm{
        padding: 20px 20px 20px 0px;
        font-size: 12px;
    }
    .x-tag {
        color: #693;
        background-image: url(tag_green.gif);
        background-repeat: no-repeat;
        background-position:  2px center;
        padding-left: 17px !important;
        *text-indent: 17px !important;
    }
    .x-flag{
        background-image: url(../../Scripts/ext-3.4.0/resources/images/default/s.gif);
        background-repeat: no-repeat;
        background-position:  2px center;
        text-indent: 17px !important;
    }
    body.ext-ie6 .x-flag .x-superboxselect-item-close {
        top: 4px;
        right: 2px;
    }
    .small {
        font-size: small;
    }
    #f2Form .x-superboxselect-item-focus {
        color: #fff;
    }
</style>
    <script language="javascript" type="text/javascript">
        var tempIdCounter = 0;
        Ext.BLANK_IMAGE_URL = 'http://static.technomedia.co.uk/libs/ext-3.2.0/resources/images/default/s.gif';
        Ext.onReady(function () {
            $("#btnToastWindow").click(function () {
                GetWindow();
            });
        })
    </script>
    <script language="javascript" type="text/javascript">
        /**
        * ajax同步请求
        *获取用例对象
        */
        function GetSuperSelectData() {
            var obj;
            var value;
            var strUrl = '../SuoperBoxSelect/GetSuperSocketStore';
            if (window.ActiveXObject)
                obj = new ActiveXObject('Microsoft.XMLHTTP');
            else if (window.XMLHttpRequest)
                obj = new XMLHttpRequest;
            obj.open('POST', strUrl, false);
            obj.setRequestHeader('Contnent-Type', 'application/', 'application/x-www-form-urlencoded');
            obj.send(null);
            var oResult = Ext.util.JSON.decode(obj.responseText);
            return oResult;
        }
    </script>
    <script language="javascript" type="text/javascript">
        /**
        * form
        */
        function GetForm() {
            var SelectData = GetSuperSelectData();
            //example 5
            var states3 = new Ext.data.SimpleStore({
                fields: ['abbr', 'state', 'nick', 'cls'],
                data: SelectData,
                sortInfo: { field: 'state', direction: 'ASC' }
            });
            var superSelect = new Ext.ux.form.SuperBoxSelect({
                allowBlank: false,
                msgTarget: 'title',
                id: 'selector5',
                xtype: 'superboxselect',
                fieldLabel: 'States',
                resizable: true,
                hiddenName: 'statesHidden[]',
                width: 300,
                store: states3,
                mode: 'local',
                displayField: 'state',
                displayFieldTpl: '{state} ({abbr})',
                valueField: 'abbr',
                navigateItemsWithTab: false,
                value: ['AL', 'AZ']
            });
            var form = new Ext.form.FormPanel({
                frame: true,
                //title: '表单标题',
                style: 'margin:10px',
                items: [superSelect]
            });
            return form;
};
    /**
    * window
    */
    function GetWindow() {
        var form = GetForm();
        var win = new Ext.Window({
            title: '窗口',
            width: 476,
            height: 374,
            items: [form],
            resizable: true,
            modal: true,
            closable: true,
            maximizable: true,
            minimizable: true,
            buttons: [{
                text: '确定',
                handler: function () {
                    var strValue = Ext.getCmp('selector5').getValue();
                    Ext.Msg.alert("提示", strValue);
                    win.close();
                }
            }, {
                text: '取消',
                handler: function () {
                    Ext.Msg.alert('提示', '取消');
                    win.close();
                }
            }]
        });
        win.show();
    }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        Example 5</h2>
    <p>
        This example demonstrates using <code>applyTo</code> to apply the component to an
        existing dom element.</p>
    <input type="button" id="btnToastWindow" value="弹出窗口" />
</asp:Content>
Controller:
这里只是构造一些测试数据,可以根据真是场景从数据库去数据和组织数据,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Lucky.Models; namespace Lucky.Controllers
{
public class SuoperBoxSelectController : Controller
{
//
// GET: /SuoperBoxSelect/ public ActionResult Index()
{
return View();
} #region 获取多选下拉列表数据源 /// <summary>
/// 获取多选下拉列表数据源
/// </summary>
/// <returns></returns>
public JsonResult GetSuperSocketStore()
{
var lstDoubleSuperSelectData = new List<List<string>>();
var lstSuperSelect = _GetSuperSocketStore(); foreach(var oSuperSelect in lstSuperSelect)
{
var lstSuperSelectData = new List<string>();
lstSuperSelectData.Add(oSuperSelect.abbr);
lstSuperSelectData.Add(oSuperSelect.state);
lstSuperSelectData.Add(oSuperSelect.nick);
lstSuperSelectData.Add(oSuperSelect.cls); lstDoubleSuperSelectData.Add(lstSuperSelectData);
} return Json(lstDoubleSuperSelectData,JsonRequestBehavior.AllowGet);
} private List<CSuperSelect> _GetSuperSocketStore()
{
var lstSuperSelect = new List<CSuperSelect>(); for (var iIndex = ; iIndex < ;iIndex++ )
{
var strAbbr = string.Format("{0}{1}","abbr",iIndex);
var strState = string.Format("{0}{1}","state",iIndex);
var strNick = string.Format("{0}{1}", "nick", iIndex);
var strCls = string.Format("{0}{1}", "cls", iIndex); lstSuperSelect.Add(new CSuperSelect(strAbbr,strState,strNick,strCls));
} return lstSuperSelect;
}
#endregion }
}
Model:
public class CSuperSelect
{
public string abbr;
public string state;
public string nick;
public string cls; public CSuperSelect(string abbr, string state, string nick, string cls)
{
this.abbr = abbr;
this.state = state;
this.nick = nick;
this.cls = cls;
}
}
参考:
http://www.sencha.com/forum/showthread.php?69307-3.x-Ext.ux.form.SuperBoxSelect
http://www.iteye.com/topic/392975
http://setting.iteye.com/blog/340900
转载请注明出处:http://www.cnblogs.com/lucky_hu/admin/EditPosts.aspx?opt=1
一款不错的多选下拉列表利器—— Ext.ux.form.SuperBoxSelect的更多相关文章
- 8款非常不错的.Net反编译利器
		本人搜集了下8款非常不错的.Net反编译利器: 1.Reflector Reflector是最为流行的.Net反编译工具.Reflector是由微软员工Lutz Roeder编写的免费程序.Refle ... 
- 【特别推荐】几款极好的 JavaScript 下拉列表插件
		表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ... 
- 干货分享 9款精挑细选的HTML5应用
		对于前端开发者来说,分享一些优秀的HTML5应用可以直接拿来用,更重要的是可以激发创作的灵感.今天我们要分享9款精挑细选的HTML5应用,个个都是干货. 1.HTML5/CSS3滑块动画菜单 图标动画 ... 
- 入坑 docsify,一款神奇的文档生成利器!
		layout: postcategory: javatitle: 入坑 docsify,一款神奇的文档生成利器!tagline: by 沉默王二tags: - java Guide 哥是我认识的一个非 ... 
- 【jquery】一款不错的音频播放器——Amazing Audio Player
		前段时间分享了一款视频播放器,点击这里.今天介绍一款不错的音频播放器——Amazing Audio Player. 介绍: Amazing Audio Player 是一个使用很方便的 Windows ... 
- Flex4 双选下拉列表的实现(源代码)
		本文属原创文章,如需转载,请注明出处,谢谢 企业应用中少不了双选下拉列表控件,但几乎都没有独立的控件,Flex在这上面得天独厚,ArrayCollection的过滤功能使得我们只需要一个数据源就可以将 ... 
- 推荐一款不错的dialog小工具:artDialog
		推荐一款不错的dialog小工具, 地址:http://www.planeart.cn/demo/artDialog/_doc/labs.html 相关介绍例如以下: artDialog是一个基于ja ... 
- .net下4款不错的微信SDK
		.net下4款不错的微信SDK: 一款值得推荐的.Net微信开发SDK http://www.17ky.net/soft/474.html.Net微信公开帐号接口 WeiXinSDK http://w ... 
- LINUX下一款不错的网站压力测试工具webbench
		LINUX下一款不错的网站压力测试工具webbench 分类: Linux 2014-07-03 09:10 220人阅读 评论(0) 收藏 举报 [html] view plaincopy wget ... 
随机推荐
- ecshop运行超过30秒超时的限制解决办法
			ecshop运行超过30秒超时的限制解决办法 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-04 ecshop运行超过服务器默认的设置30秒的限制时会 ... 
- [源码]随机获取虾米音乐song_id API文件
			[源码]随机获取虾米音乐song_id API文件 January 11, 2015 注意:此API请放置于国内主机使用,如香港.北京等等,否则会提示:虾米音乐在您所处的国家或地区暂时无法使用 < ... 
- xml追加节点
			添加方法 public void XmlAppend(VisitM vm) { XmlDocument xmldoc = new XmlDocument(); string path = Server ... 
- Rice Rock
			先翻译评分要点,然后一点点翻译程序实现过程 如何产生一堆岩石? rock_group = set([])#空集合,全局变量 rock_group.add(a_rock) 要画出来draw hand ... 
- perl常用代码
			字符串联结和重复操作符 联接: . 重复:x 联接且赋值(类似+=): .=例: $newstring = "potato" . "head"; $ ... 
- c#循环迭代匿名类链表(可迭代的匿名类)
			Main(){ //为什么?object是基类啊!! //报错.不能从List<anonymous>换成List<object>. //var q=(List<objec ... 
- Mongo命令行中执行CRUD
			在命令行中使用mongo自带的shell命令来执行CRUD操作 首先链接到数据库 增 db.qiao.insert({"qq":1}) db.qiao.save({"qq ... 
- HDFS中高可用性HA的讲解
			HDFS Using QJM HA使用的是分布式的日志管理方式 一:概述 1.背景 如果namenode出现问题,整个HDFS集群将不能使用. 是不是可以有两个namenode呢 一个为对外服务-&g ... 
- Java HashMap、LinkedHashMap
			如果需要使用的Map中的key无序,选择HashMap:如果要求key有序,则选择TreeMap. 但是选择TreeMap就会有性能问题,因为TreeMap的get操作的时间复杂度是O(log(n)) ... 
- 规则html表单对象赋值
			function grid_load_callback(data, status) { if (data.rows.length > 0) { ... 
