zoukankan      html  css  js  c++  java
  • 基于JQUERY写的 LISTBOX 选择器

    本文来之于:http://blog.csdn.net/jetsteven/article/details/5104380#

    1、经常用到如下图的选择器,而且要支持排序的,所以萌生用JQUERY写一个。

    功能如下:

    • 左右多选,移动。
    • 右边的项可以上下拖动

    源代码如下

      1 /*
      2     name:TwoWay-Select Control for Jquery
      3     author:arn
      4     date:2009-12-29
      5     remark: AJAX URL返回数据必须是json格式{state:1,msg:'',fields:[]}
      6             1、右边可以上下拖动
      7             2、$('#div').twowaylist({url:'',onBeforeSubmit:'',captionColumn''});
      8             3、$('#div').twowaylistinit({field_no:'xx',...});
      9             4、$('#div').twowaylistsubmit({'rptid':$('#txtid').val(),'act':'rpt'}) //AJAX URL用到的参数
     10 */
     11 (function($){
     12     $.addList = function(t,p)
     13     {
     14         if (t.checkbox) return false; //return if already exist    
     15         
     16         // apply default properties
     17         p = $.extend({
     18             items:[], //ALL ITEMS
     19             captionColumn:'caption', //显示的名称
     20             isgroupColumn:'group', //分组CHECKBOX用到的字段
     21             idColumn:'FIELD_NO', //编号字段
     22              height: 320, //default height
     23               'auto', //auto width
     24              url: false, //ajax url
     25              method: 'POST', // data sending method
     26              errormsg: 'Connection Error',
     27              title: false,
     28              dataType:'json',
     29              onSuccess: false, // using a custom populate function
     30              onBeforeSubmit: false //提交之前处理事项
     31           }, p);
     32               
     33         //create twoway-select class
     34         var d = {
     35             json2str:function(json)
     36             {
     37                 var isArrObj = $.isArray(json);
     38                 var arr = [];
     39                 //
     40                 for (var key in json) 
     41                 {
     42                     var k = isArrObj? '' :  key+":" ;
     43                     
     44                     if (typeof json[key] == 'object' && json[key] != null)
     45                         arr.push(k + d.json2str(json[key]));            //JSON对象
     46                     else
     47                         arr.push(k + "'" + decodeURIComponent(json[key]) +"'");    //普通值
     48                 }
     49                 return isArrObj ? '[' + arr.join(',') + ']' : '{' + arr.join(',') + '}';
     50             },
     51             str2json:function(str)
     52             {
     53                 return eval('('+str+')');
     54             },        
     55             l2r:function(o){
     56                 
     57                 var json = d.str2json($(o).attr('json'));
     58                 var chk = document.createElement("input");
     59                 //IF GROUP
     60                 var chked = json[p.isgroupColumn]==1?'checked':'';
     61                 $(chk).attr({'type':'checkbox','id':'li'+json[p.idColumn],'checked':chked});
     62                 $(o).prepend(chk);
     63                 $(d.rdiv).find('ol').append(o);
     64                 //change json value,if checkbox state changed
     65                 $(o).find("input:checkbox").bind('click',function()
     66                 {
     67                     if($(this).attr('checked'))
     68                     {
     69                         json[p.isgroupColumn] = 1;
     70                     }else{
     71                         json[p.isgroupColumn] = 0;
     72                     }                        
     73                     $(o).attr("json",d.json2str(json));
     74                 });            
     75                 $(d.vinput).val(d.getselected());
     76             },
     77             r2l:function(o){
     78                 $(o).find(":checkbox").remove();
     79                 $(d.ldiv).find('ol').append(o);
     80                 $(d.vinput).val(d.getselected());
     81             },
     82             l2rAll:function(){
     83                 $("li", $(d.ldiv).find('ol')).each(function(i,obj){
     84                     d.l2r(obj);
     85                 });            
     86             },
     87             r2lAll:function(){
     88                 $("li", $(d.rdiv).find('ol')).each(function(i,obj){
     89                     d.r2l(obj);
     90                 });             
     91             },
     92             getselected:function(){
     93                 var result=[];
     94                 
     95                 $(d.rdiv).find('li').each(function(i,obj){
     96                     result.push($(this).attr('json'));
     97                 });               
     98                 return result;
     99             },      
    100             initData:function(data){
    101                 $(d.ldiv).find('ol').empty();
    102                 $(d.rdiv).find('ol').empty();
    103                 var li;
    104                 var lbl;
    105                 for (i=0;i<data.length;i++){
    106                     var li = document.createElement('li');
    107                     lbl = document.createElement('label');
    108                     if(true)
    109                     {
    110                         $(lbl).text(data[i][p.idColumn] + ' '+ data[i][p.captionColumn]); //.attr("for",'li' + data[i][p.idColumn])
    111                     }else{
    112                         $(lbl).text(data[i][p.captionColumn]);
    113                     }
    114                     $(li).attr('json',d.json2str(data[i])).append(lbl);
    115                    
    116                     $(d.ldiv).find('ol').append(li);                
    117                 }
    118                 $(d.ldiv).find('ol li').each(function(i,obj)
    119                 {
    120                     $(obj).bind('dblclick',function()
    121                     {
    122                         if($(this).parent().hasClass('twowaylist-lol'))
    123                         {
    124                             d.l2r(this);
    125                         }else{
    126                             d.r2l(this);
    127                         }                        
    128                     }).bind('click',function()
    129                     {
    130                         $(this).toggleClass("ui-selected");                        
    131                     });                 
    132                 });
    133             
    134             },
    135             ajaxSubmit:function(para){
    136                 if(p.url){
    137                    
    138                     if(p.onBeforeSubmit) para= p.onBeforeSubmit();
    139                     $.ajax({
    140                        type: p.method,
    141                        timeout:20 * 1000,
    142                        url: p.url,
    143                        async:false, 
    144                        data: para,
    145                        dataType: p.dataType,
    146                        success: function(data){ 
    147                             if(data.state == 1)
    148                             {
    149                                 $(d.caption).html('');
    150                                 d.initData(data.fields); 
    151                                 if(p.onSuccess) //执行成功后
    152                                 {
    153                                     p.onSuccess();
    154                                 }
    155                             }else{
    156                                 $(d.caption).html('数据加载失败<br/>' + data.msg );
    157                             }
    158                        },
    159                        error: function(data) { try { alert(data.toString()) } catch (e) {} },
    160                        beforeSend:function(data) { },
    161                        complete :function(){ }
    162                      });                    
    163                 }
    164             
    165             }
    166         };
    167         
    168         if(p.width == 'auto')
    169         {
    170             p.width = 600;
    171         }
    172         var mdivwidth = 80;
    173         //init div
    174         d.aDiv = document.createElement('div');
    175         
    176         d.ldiv = document.createElement('div');
    177         $(d.ldiv).addClass('twowaylist-oldiv').width((p.width - mdivwidth) /2 ).height(p.height);
    178         
    179         d.rdiv = document.createElement('div');
    180         $(d.rdiv).addClass('twowaylist-oldiv').width((p.width - mdivwidth) /2 ).height(p.height);
    181         
    182         d.mdiv = document.createElement('div');
    183         $(d.mdiv).width(mdivwidth);
    184         
    185         d.mTable = document.createElement('table');
    186         d.mTable.cellPadding = 0;
    187         d.mTable.cellSpacing = 0;
    188         
    189         //add button
    190         var br="<br />";
    191         //l2r
    192         var btnDiv = document.createElement('input');
    193         $(btnDiv).addClass('twowaylist-button').attr({'type':'button','value':'>'});
    194         
    195         $(btnDiv).click(
    196             function()
    197             {
    198                 $('.ui-selected', d.ldiv).each(function()
    199                 {
    200                     d.l2r(this);
    201                 });
    202             }
    203         );
    204         $(d.mdiv).append(btnDiv);
    205         $(d.mdiv).append(br);
    206         //r2l
    207         btnDiv = document.createElement('input');
    208         $(btnDiv).addClass('twowaylist-button').attr({'type':'button','value':'<'});
    209         $(btnDiv).click(
    210             function()
    211             {
    212                 $('.ui-selected', d.rdiv).each(function()
    213                 {
    214                     d.r2l(this);
    215                 });
    216             }
    217         );
    218         $(d.mdiv).append(btnDiv);
    219         $(d.mdiv).append(br);
    220         //l2r all
    221         btnDiv = document.createElement('input');
    222         $(btnDiv).attr({'type':'button','value':'>>'}).addClass('twowaylist-button');
    223         $(btnDiv).click(
    224             function()
    225             {
    226                 d.l2rAll();
    227             }
    228         );
    229         $(d.mdiv).append(btnDiv);   
    230         $(d.mdiv).append(br);  
    231         //r2l all
    232         btnDiv = document.createElement('input');
    233         $(btnDiv).attr({'type':'button','value':'<<'}).addClass('twowaylist-button');
    234         $(btnDiv).click(
    235             function()
    236             {
    237                 d.r2lAll();
    238             }
    239         );
    240         $(d.mdiv).append(btnDiv);                                           
    241         $('span',d.mdiv)
    242         .css({paddingLeft:20})
    243         ;            
    244         
    245         
    246         //set div
    247         d.caption = document.createElement("caption");
    248         $(d.mTable).append(d.caption);
    249         //set table th
    250         var thead = document.createElement("thead");
    251         var tr = document.createElement("tr");
    252         var th=document.createElement("th");
    253         $(th).html('待选项');
    254         $(tr).append(th);
    255         th=document.createElement("th");
    256         $(tr).append(th);
    257         th=document.createElement("th");
    258         $(th).html('已选项');
    259         $(tr).append(th);                
    260         $(thead).append(tr);
    261         $(d.mTable).append(thead);
    262         var tbody = document.createElement("tbody");
    263         
    264         tr = document.createElement("tr");
    265         
    266         var td = document.createElement("td");
    267         var lol= document.createElement("ol");
    268         $(lol).addClass('twowaylist-lol');
    269         $(d.ldiv).append(lol);
    270         
    271         $(td).append(d.ldiv);
    272         $(tr).append(td);
    273         td = document.createElement("td");
    274         $(td).append(d.mdiv);
    275         $(tr).append(td);
    276         td = document.createElement("td");
    277         
    278         var rol= document.createElement("ol");
    279         $(rol).addClass("twowaylist-rol");
    280         $(d.rdiv).append(rol);
    281         $(td).append(d.rdiv);
    282         $(tr).append(td);
    283         
    284         $(tbody).append(tr);
    285         $(d.mTable).append(tbody);
    286         $(t).append(d.mTable);
    287         
    288         d.vinput = document.createElement("input");
    289         $(d.vinput).attr({'type':'hidden','id':'twowaylistValue'});
    290         $(t).append(d.vinput);
    291         //leftlist selectable
    292         //$(lol).selectable();        
    293         //rightlist sortable
    294         $(rol).sortable();        
    295         
    296         t.list = d;
    297         //load items
    298         if(p.items)
    299         {
    300             d.initData(p.items);
    301         }
    302         return t;
    303     };
    304     
    305     var docloaded = false;
    306     $(document).ready(function () {docloaded = true} );
    307     //初始化
    308     $.fn.twowaylist = function(p) {
    309         return this.each( function() {
    310             var t = this;
    311                 if (!docloaded)
    312                 {
    313                     $(this).hide();
    314                     $(document).ready
    315                     (
    316                         function ()
    317                         {
    318                             $.addList(t,p);
    319                         }
    320                     );
    321                 } else {
    322                     $.addList(this,p);
    323                 }
    324             });
    325     }; //end twowaylist    
    326     //初始化列表,参数为json array
    327     $.fn.twowaylistinit = function(data) {
    328         return this.each(function(){
    329             if(this.list)
    330             {
    331                 this.list.initData(data); 
    332             }
    333         });
    334     }; //end twowaylistinit
    335     //AJAX提交,获取字段列表,参数如{id:'2'}
    336     $.fn.twowaylistsubmit = function(pa) {
    337         return this.each(function(){
    338             if(this.list)
    339             {
    340                 this.list.ajaxSubmit(pa); 
    341             }
    342         });
    343     }; //end twowaylistsubmit    
    344 })(jQuery);
  • 相关阅读:
    如何挑选牙膏--2019/10/20
    怎样选卫生纸-2019/10/20
    页面动态加入<script>标签并执行代码
    ss 各种浏览器兼容前缀写法
    nth-child(n)、first-child、last-child用法
    改变checkbox的默认样式
    border和outline的区别
    标签嵌套规则和注意事项
    物理尺寸 转换为 像素
    打印iframe内容
  • 原文地址:https://www.cnblogs.com/laoji1109/p/3767862.html
Copyright © 2011-2022 走看看