左右选择框 js插件

随着项目的进展,测试工程师在更多的浏览器中兼容性测试中,发现有些浏览器不支持option的触发事件,这就造成了先前一篇博文bootstrap 左右框多项选择示例

中左右选择框的失效,于是我就由原先的select-option结构 改成了 现在的 ul-li 结构,并写成了js插件的形式,方便以后调用和修改,并在多个浏览器测试中得到验证:

实现的页面如下:

jsp页面的修改如下:

 1                 <div id="province_dchannel">
 2                      <div class="panel panel-default">
 3                         <!-- Default panel contents -->
 4                         <div class="panel-heading">选择省份</div>
 5                         <fieldset>
 6                             <table class="table table-bordered dchannel-table">
 7                                 <tbody>
 8                                     <tr class="item-default">
 9                                         <td align="right">
10                                         <div class="has-feedback">
11                                             <label class="control-label sr-only" for="search_province_repo"></label>
12                                             <input type="text" class="form-control search-for-select phone1" id="search_province_repo" placeholder="Search" forselect="sel_all_area" />
13                                             <span class="glyphicon glyphicon-search form-control-feedback" style="height:40px;line-height:40px;margin-right:-10px;"></span>
14                                             <div style="padding-top:8px;">
15                                                 <%-- <select id="sel_all_area" multiple="multiple" size="10" style="width:100%;height:222px;">
16                                                        <c:forEach items="${unselectedAreas}" var="area" varStatus="loop">
17                                                              <option value="${area.code}">${area.name}(${area.code})</option>
18                                                        </c:forEach>
19                                                  </select> --%>
20                                                  <ul id="sel_all_area" style="width:100%;height:222px;border-radius:0px;overflow-y: scroll;padding-left:10px;text-align:left;">
21                                                        <c:forEach items="${unselectedAreas}" var="area" varStatus="loop">
22                                                              <li class="proxy_li" data="${area.code}">${area.name}(${area.code})</li>
23                                                        </c:forEach>
24                                                  </ul>
25                                            </div>
26                                         </div>
27
28                                         </td>
29                                         <td style="width: 50px;" valign="middle">
30                                           <div style="padding-top:38px;">
31                                             <button type="button" class="btn btn-default btn-small gr" id="btn_select_all_area"><span class="glyphicon glyphicon-forward"></span></button>
32                                                <button type="button" class="btn btn-default btn-small gr" id="btn_choose_selected_area"><span class="glyphicon glyphicon-chevron-right"></span></button>
33                                                <button type="button" class="btn btn-default btn-small gr" id="btn_remove_selected_area"><span class="glyphicon glyphicon-chevron-left"></span></button>
34                                                <button type="button" class="btn btn-default btn-small gr" id="btn_remove_all_area"><span class="glyphicon glyphicon-backward"></span></button>
35                                           </div>
36                                         </td>
37                                         <td style="width: 45%;">
38                                         <div class="has-feedback">
39                                             <label class="control-label sr-only" for="search_province_select"></label>
40                                             <input type="text" class="form-control search-for-select phone1" id="search_province_select" placeholder="Search" forselect="sel_selected_areas">
41                                             <span class="glyphicon glyphicon-search form-control-feedback" style="height:40px;line-height:40px;margin-right:-10px;"></span></input>
42                                             <div style="padding-top:8px;">
43                                                 <%-- <select id="sel_selected_areas"  multiple="multiple" size="10" style="width:100%;height:222px;">
44                                                          <c:forEach items="${selectedAreas}" var="area" varStatus="loop">
45                                                              <option value="${area.code}">${area.name}(${area.code})</option>
46                                                        </c:forEach>
47                                                    </select> --%>
48                                                    <ul id="sel_selected_areas"  style="width:100%;height:222px;border-radius:0px;overflow-y: scroll;padding-left:10px;text-align:left;">
49                                                          <c:forEach items="${selectedAreas}" var="area" varStatus="loop">
50                                                              <li class="proxy_li" data="${area.code}">${area.name}(${area.code})</li>
51                                                        </c:forEach>
52                                                    </ul>
53                                             </div>
54                                         </div>
55                                       </td>
56                                     </tr>
57                                 </tbody>
58                             </table>
59                         </fieldset>
60                     </div>

下面是调用插件的代码

$(function () {
        $.selectBox({
            ulFrom: ‘sel_all_area‘,
            ulTo: ‘sel_selected_areas‘,
            selectAll: ‘btn_select_all_area‘,
            selectSelected: ‘btn_choose_selected_area‘,
            removeAll: ‘btn_remove_all_area‘,
            removeSelected: ‘btn_remove_selected_area‘,
            selectedClass: ‘selected‘,
            quickQuery: ‘search-for-select‘
        });
    });

最后直接贴出缩写插件的代码:

/**
 * 智能左右选择框插件
 * @param sel_all_from 资源选择框
 * @param sel_all_to 目标选择框
 * @remark 由于select-option组合造成某些浏览器不支持option事件,所以此插件采用ul-li组合来模拟完成选择</br>经测试,支持firefox,chrome,ie6+,360,猎豹等主流浏览器
 * @date 2015-1-13
 * @author wjq1255
 *
 */
(function ($) {
    $.selectBox = function (options) {
        var defaults = {
                ulFrom: ‘ul_all_from‘,
                ulTo: ‘ul_all_to‘,
                selectAll: ‘btn_select_all‘,
                selectSelected: ‘btn_select_selected‘,
                removeAll: ‘btn_remove_all‘,
                removeSelected: ‘btn_remove_selected‘,
                selectedClass: ‘selected‘,
                quickQuery:‘‘
            };
        //init
        var option = $.extend(defaults, options);
        var j_all_from = $("#"+option.ulFrom),
            j_selected_to = $("#"+option.ulTo);

        var b_select_all = $("#"+option.selectAll),
            b_select_selected = $("#"+option.selectSelected),
            b_remove_all = $("#"+option.removeAll),
            b_remove_selected = $("#"+option.removeSelected);
        //快速搜索选择匹配
        var quickQuery = function(){
            var b_quick_query = $("input."+option.quickQuery);
            b_quick_query.keyup(function(){
                var select = $(this).attr("forselect");
                var keyvalue = $(this).val();
                $("#" + select).find("li").each(function(){
                    if($(this).html().indexOf(keyvalue) >= 0 || !keyvalue){
                        $(this).show();
                    }else{
                        $(this).hide();
                    }
                });
                return false;
            });
        }

        if(option.quickQuery != ‘‘){//设定快速搜索选择匹配
            quickQuery();
        }

        b_select_all.click(function(){//全选按钮
            j_all_from.find("li").each(function(){
                $(this).appendTo(j_selected_to);
            });
            return false;
        });
        b_select_selected.click(function(){//单选按钮
            j_all_from.find("li.selected").each(function(){
                $(this).appendTo(j_selected_to);
            });
            return false;
        });
        b_remove_selected.click(function(){//单选返回按钮
            j_selected_to.find("li.selected").each(function(){
                $(this).appendTo(j_all_from);
            });
            return false;
        });
        b_remove_all.click(function(){//全选返回按钮
            j_selected_to.find("li").each(function(){
                $(this).appendTo(j_all_from);
            });
            return false;
        });

        j_all_from.find("li").on("click", function(event){
            event = event || window.event;
            //单击选中,按住Ctrl键实现多选,否则,单选
            if(event.ctrlKey){
                $(this).toggleClass("selected");
            }else{
                $(this).toggleClass("selected").siblings("li.selected").removeClass("selected");
            }
            return false;
        });
        j_selected_to.find("li").on("click", function(event){
            event = event || window.event;
            //单击选中,按住Ctrl键实现多选,否则,单选
            if(event.ctrlKey){
                $(this).toggleClass("selected");
            }else{
                $(this).toggleClass("selected").siblings("li.selected").removeClass("selected");
            }
            return false;
         });
        //双击选择选项
        j_all_from.find("li").on("dblclick", function(){
            $(this).addClass("selected");
            if ($(this).parent("ul").is(j_all_from)) {
                b_select_selected.click();
            }
            else {
                b_remove_selected.click();
            }
            return false;
        });
        //双击返回选项
        j_selected_to.find("li").on("dblclick", function(){
            $(this).addClass("selected");
            if ($(this).parent("ul").is(j_selected_to)) {
                b_select_selected.click();
            }
            else {
                b_remove_selected.click();
            }
            return false;
        });
    };
})(jQuery);
时间: 2024-11-07 23:47:07

左右选择框 js插件的相关文章

jquery.chosen.js下拉选择框美化插件项目实例

由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生变化.为了界面的美观,不得已查资料寻找另外的插件. 使用jquery.chosen.js下拉选择框美化插件同样也能达到类似效果 完成效果如下 实现步骤如下 1.导入相关文件 <link rel="stylesheet" href="${ctxStatic}/css/chos

[jQueryUI] - Chosen:select下拉选择框美化插件及问题【转】

hosen 是一个支持jquery的select下拉框美化插件,它能让丑陋的.很长的select选择框变的更好看.更方便.不仅如此,它更扩展了select,增加了自动筛选的功能.它可对列表进行分组,同时也可禁用某些选择项. 先来看下插件的效果:   跟这个比起来,原来的select样式是不是弱爆了! 马上来武装我们的select吧: 1.先把js和css文件引用到网页里面去: ? 1 2 3 <link href="js/jqueryUI/chosen/chosen.css" t

基于jQuery美化联动下拉选择框

今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="container"> <div class="inner"> <section id="main_content"

jQuery插件——下拉选择框

其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $.fn.extend({ dropdown:function (options) { return this.each(function (i, val) { $(val).css("position", "relative"); // 设置默认参数 var opts =

前端插件之Bootstrap Switch 选择框开关控制

简介 Bootstrap Switch是一款轻量级插件,可以给选择框设置类似于开关的样式 它是依赖于Bootstrap的一款插件 下载 下载地址 在线引用 导入 因为它是依赖于Bootstrap的一款插件,所以,在引入之前要先引入Bootstrap样式 <link rel="stylesheet" type="text/css" href="/static/plugin/bootstrap/css/bootstrap.min.css">

Bootstrap入门(二十九)JS插件6:弹出框

加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入CSS文件和JS文件 <link href="bootstrap.min.css" rel="stylesheet"> <script src="jquery-3.1.0.min.js" type="text/javascript"></script&

关于Bootstrap之JS插件模态框的重要注意事项

用modal.js插件的模态框时,根据参考文档写下了如下代码: $('#myModal').modal('toggle').on('shown.bs.modal', function (e) { //TODO something }); 运行结果: chrome正常! IE8+(低版本没试)不响应事件,竟然不响应事件! >>排查步骤: 翻看文档,看有没有介绍此处存在兼容问题,结果没有: 既然不存在兼容问题,就是代码的编写问题了,问题变得好办了,顺序翻转: $('#myModal').on('s

custombox.js 插件如何点空白处不隐藏弹出框 overlayClose属性的应用

bootstrap中使用了custombox.js 插件,如下代码 <button  href="/systems/application/add" data-target="custom-modal" type="button" class="btn_common btn-success waves-effect waves-light" data-animation="fadein" data-o

js中,表单中的选择框学习与使用总结

选择框脚本 选择框是通过<select>和<option>元素来创建.下面从对选择框的几个操作,来学习,总结Js中操作选择框的方法 一.选择选项 (1)只允许选择一项的选择框,访问选项中的最简单方式,就是使用选择框的selectIndex属性. selectedIndex 属性可设置或返回下拉列表中被选选项的索引号.设置selectedIndex会导致取消以前的所有选项并选择指定的那一项,而读取selectedIndex则只会返回选中项第一项的索引值.注意:若允许多重选择,则仅会返