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

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

功能如下:

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

源代码如下

 /*
name:TwoWay-Select Control for Jquery
author:arn
date:2009-12-29
remark: AJAX URL返回数据必须是json格式{state:1,msg:'',fields:[]}
1、右边可以上下拖动
2、$('#div').twowaylist({url:'',onBeforeSubmit:'',captionColumn''});
3、$('#div').twowaylistinit({field_no:'xx',...});
4、$('#div').twowaylistsubmit({'rptid':$('#txtid').val(),'act':'rpt'}) //AJAX URL用到的参数
*/
(function($){
$.addList = function(t,p)
{
if (t.checkbox) return false; //return if already exist // apply default properties
p = $.extend({
items:[], //ALL ITEMS
captionColumn:'caption', //显示的名称
isgroupColumn:'group', //分组CHECKBOX用到的字段
idColumn:'FIELD_NO', //编号字段
height: , //default height
width: 'auto', //auto width
url: false, //ajax url
method: 'POST', // data sending method
errormsg: 'Connection Error',
title: false,
dataType:'json',
onSuccess: false, // using a custom populate function
onBeforeSubmit: false //提交之前处理事项
}, p); //create twoway-select class
var d = {
json2str:function(json)
{
var isArrObj = $.isArray(json);
var arr = [];
//
for (var key in json)
{
var k = isArrObj? '' : key+":" ; if (typeof json[key] == 'object' && json[key] != null)
arr.push(k + d.json2str(json[key])); //JSON对象
else
arr.push(k + "'" + decodeURIComponent(json[key]) +"'"); //普通值
}
return isArrObj ? '[' + arr.join(',') + ']' : '{' + arr.join(',') + '}';
},
str2json:function(str)
{
return eval('('+str+')');
},
l2r:function(o){ var json = d.str2json($(o).attr('json'));
var chk = document.createElement("input");
//IF GROUP
var chked = json[p.isgroupColumn]==?'checked':'';
$(chk).attr({'type':'checkbox','id':'li'+json[p.idColumn],'checked':chked});
$(o).prepend(chk);
$(d.rdiv).find('ol').append(o);
//change json value,if checkbox state changed
$(o).find("input:checkbox").bind('click',function()
{
if($(this).attr('checked'))
{
json[p.isgroupColumn] = ;
}else{
json[p.isgroupColumn] = ;
}
$(o).attr("json",d.json2str(json));
});
$(d.vinput).val(d.getselected());
},
r2l:function(o){
$(o).find(":checkbox").remove();
$(d.ldiv).find('ol').append(o);
$(d.vinput).val(d.getselected());
},
l2rAll:function(){
$("li", $(d.ldiv).find('ol')).each(function(i,obj){
d.l2r(obj);
});
},
r2lAll:function(){
$("li", $(d.rdiv).find('ol')).each(function(i,obj){
d.r2l(obj);
});
},
getselected:function(){
var result=[]; $(d.rdiv).find('li').each(function(i,obj){
result.push($(this).attr('json'));
});
return result;
},
initData:function(data){
$(d.ldiv).find('ol').empty();
$(d.rdiv).find('ol').empty();
var li;
var lbl;
for (i=;i<data.length;i++){
var li = document.createElement('li');
lbl = document.createElement('label');
if(true)
{
$(lbl).text(data[i][p.idColumn] + ' '+ data[i][p.captionColumn]); //.attr("for",'li' + data[i][p.idColumn])
}else{
$(lbl).text(data[i][p.captionColumn]);
}
$(li).attr('json',d.json2str(data[i])).append(lbl); $(d.ldiv).find('ol').append(li);
}
$(d.ldiv).find('ol li').each(function(i,obj)
{
$(obj).bind('dblclick',function()
{
if($(this).parent().hasClass('twowaylist-lol'))
{
d.l2r(this);
}else{
d.r2l(this);
}
}).bind('click',function()
{
$(this).toggleClass("ui-selected");
});
}); },
ajaxSubmit:function(para){
if(p.url){ if(p.onBeforeSubmit) para= p.onBeforeSubmit();
$.ajax({
type: p.method,
timeout: * ,
url: p.url,
async:false,
data: para,
dataType: p.dataType,
success: function(data){
if(data.state == )
{
$(d.caption).html('');
d.initData(data.fields);
if(p.onSuccess) //执行成功后
{
p.onSuccess();
}
}else{
$(d.caption).html('数据加载失败<br/>' + data.msg );
}
},
error: function(data) { try { alert(data.toString()) } catch (e) {} },
beforeSend:function(data) { },
complete :function(){ }
});
} }
}; if(p.width == 'auto')
{
p.width = ;
}
var mdivwidth = ;
//init div
d.aDiv = document.createElement('div'); d.ldiv = document.createElement('div');
$(d.ldiv).addClass('twowaylist-oldiv').width((p.width - mdivwidth) / ).height(p.height); d.rdiv = document.createElement('div');
$(d.rdiv).addClass('twowaylist-oldiv').width((p.width - mdivwidth) / ).height(p.height); d.mdiv = document.createElement('div');
$(d.mdiv).width(mdivwidth); d.mTable = document.createElement('table');
d.mTable.cellPadding = ;
d.mTable.cellSpacing = ; //add button
var br="<br />";
//l2r
var btnDiv = document.createElement('input');
$(btnDiv).addClass('twowaylist-button').attr({'type':'button','value':'>'}); $(btnDiv).click(
function()
{
$('.ui-selected', d.ldiv).each(function()
{
d.l2r(this);
});
}
);
$(d.mdiv).append(btnDiv);
$(d.mdiv).append(br);
//r2l
btnDiv = document.createElement('input');
$(btnDiv).addClass('twowaylist-button').attr({'type':'button','value':'<'});
$(btnDiv).click(
function()
{
$('.ui-selected', d.rdiv).each(function()
{
d.r2l(this);
});
}
);
$(d.mdiv).append(btnDiv);
$(d.mdiv).append(br);
//l2r all
btnDiv = document.createElement('input');
$(btnDiv).attr({'type':'button','value':'>>'}).addClass('twowaylist-button');
$(btnDiv).click(
function()
{
d.l2rAll();
}
);
$(d.mdiv).append(btnDiv);
$(d.mdiv).append(br);
//r2l all
btnDiv = document.createElement('input');
$(btnDiv).attr({'type':'button','value':'<<'}).addClass('twowaylist-button');
$(btnDiv).click(
function()
{
d.r2lAll();
}
);
$(d.mdiv).append(btnDiv);
$('span',d.mdiv)
.css({paddingLeft:})
; //set div
d.caption = document.createElement("caption");
$(d.mTable).append(d.caption);
//set table th
var thead = document.createElement("thead");
var tr = document.createElement("tr");
var th=document.createElement("th");
$(th).html('待选项');
$(tr).append(th);
th=document.createElement("th");
$(tr).append(th);
th=document.createElement("th");
$(th).html('已选项');
$(tr).append(th);
$(thead).append(tr);
$(d.mTable).append(thead);
var tbody = document.createElement("tbody"); tr = document.createElement("tr"); var td = document.createElement("td");
var lol= document.createElement("ol");
$(lol).addClass('twowaylist-lol');
$(d.ldiv).append(lol); $(td).append(d.ldiv);
$(tr).append(td);
td = document.createElement("td");
$(td).append(d.mdiv);
$(tr).append(td);
td = document.createElement("td"); var rol= document.createElement("ol");
$(rol).addClass("twowaylist-rol");
$(d.rdiv).append(rol);
$(td).append(d.rdiv);
$(tr).append(td); $(tbody).append(tr);
$(d.mTable).append(tbody);
$(t).append(d.mTable); d.vinput = document.createElement("input");
$(d.vinput).attr({'type':'hidden','id':'twowaylistValue'});
$(t).append(d.vinput);
//leftlist selectable
//$(lol).selectable();
//rightlist sortable
$(rol).sortable(); t.list = d;
//load items
if(p.items)
{
d.initData(p.items);
}
return t;
}; var docloaded = false;
$(document).ready(function () {docloaded = true} );
//初始化
$.fn.twowaylist = function(p) {
return this.each( function() {
var t = this;
if (!docloaded)
{
$(this).hide();
$(document).ready
(
function ()
{
$.addList(t,p);
}
);
} else {
$.addList(this,p);
}
});
}; //end twowaylist
//初始化列表,参数为json array
$.fn.twowaylistinit = function(data) {
return this.each(function(){
if(this.list)
{
this.list.initData(data);
}
});
}; //end twowaylistinit
//AJAX提交,获取字段列表,参数如{id:'2'}
$.fn.twowaylistsubmit = function(pa) {
return this.each(function(){
if(this.list)
{
this.list.ajaxSubmit(pa);
}
});
}; //end twowaylistsubmit
})(jQuery);

基于JQUERY写的 LISTBOX 选择器的更多相关文章

  1. 一个基于jQuery写的弹窗效果(附源码)

    最近项目中频繁遇到需要弹出窗口的功能,一直使用浏览器默认的Alert和Confirm弹窗,感觉视觉效果不是那么好,而从网上下载的话又找不到合适的,找到的话有些也是十分臃肿,有时候感觉学习配置的功夫自己 ...

  2. 仿照jQuery写一个关于选择器的框架(带了注释,请多多指教~)

    var select = (function () { //这是一个异常与捕获的代码,它表示的意思是:如果push方法出现了错误那么就需要重写push方法 try { //这边是自己模拟一个场景,来使 ...

  3. 基于jquery开发的UI框架整理分析

    根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据j ...

  4. 基于jQuery带备忘录功能的日期选择器

    今天给大家分享一款基于jQuery带备忘录功能的日期选择器.这款日期控制带有备记忘录功能.有备忘录的日期有一个圆圈,单击圆圈显示备忘录.该实例适用浏览器:360.FireFox.Chrome.Safa ...

  5. 基于jQuery的视频和音频播放器jPlayer

    jPlayer见网络上资料很少,官方英文资料太坑爹TAT,于是就写一个手记给大家参考下.据我观察,jPlayer的原理主要是用到HTML5,在不支持HTML5的浏览器上使用SWF.做到全兼容,这一点很 ...

  6. 10款基于jquery的web前端特效及源码下载

    1.jQuery时间轴插件:jQuery Timelinr 这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚 ...

  7. 基于jQuery查找dom的多种方式性能问题

    这个问题的产生由于我们前端组每个人的编码习惯的差异,最主要的还是因为代码的维护性问题.在此基础上,我对jQuery源码(1.11.3)查找dom节点相关的内容进行了仔细的查阅,虽然并不能理解的很深入 ...

  8. 基于jquery的城市选择插件

    城市选择插件的难度不是很大,主要是对dom节点的操作.而我写的这个插件相对功能比较简答,没有加入省市联动. 上代码好了,参照代码的注释应该比较好理解. /* *基于jquery的城市选择插件 *aut ...

  9. 基于jquery的插件开发

    最近在公司做一个项目,由于后台数据太多需要分页显示,在网上找了很多插件都没有找到合适的分页插件,所有的分页插件始终达不到自己想要的效果.由于这个项目也不是很赶,就在网上查找各种资料,自己写一个基于jq ...

随机推荐

  1. 【nodejs学习】2.网络相关

    1.官方文档的一个小例子 //http是内置模块 var http = require('http'); http.createServer(function(request, response){ ...

  2. 随机获取oracle数据库中的任意一行数据(rownum)

    最近看oracle资料的时候,了解rownum的概念,以前只知道对数据库表进行简单的增删改查: 看到了rownum的概念后,突然想到了好多业务场景应该都可以适用的,比如在进行随机发奖的时候, 我们就可 ...

  3. C#ArrayList对象集合

    ArrayList alist = new ArrayList(); //集合对像 长度可以改变,类型不限 //添加单个元素可以Add() alist.Add("在在的"); al ...

  4. 1 Linux平台下快速搭建FTP服务器 win7下如何建立ftp服务器

    百度经验连接(亲测可用) http://jingyan.baidu.com/article/380abd0a77ae041d90192cf4.html win7下如何建立ftp服务器 http://j ...

  5. windows下配置lamp环境(2)---配置Apache服务器2.2.25

    配置Apache 配置Apache时,先要找到安装目录中的主配置文httpd.conf,使用文本编辑器打开,最好不要使用windows自带的编辑器,可以使用NotePad++, vim,或者subli ...

  6. IE6 png 透明 (三种解决方法)(转来的哦)

    FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 ====================================================== ...

  7. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

  8. [SQL注入2]FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION

    FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION 这里先介绍一下POSTGRESQL.这是一款数据库管理系统,与oracle是同类型软件.08年左右的市场 ...

  9. 智能卡安全机制比较系列(一)CardOS

    自从智能卡开始进入人们的日常生活之后,大家对于智能卡的安全性普遍看好,但是不同公司的智能卡在安全机制的实现方面也存在很多的差异.对于智能卡应用开发和智能卡COS设计人员来说,如果能够更多地了解不同公司 ...

  10. 使用Keil软件编写汇编源程序应注意事项

    1)一定要使用微软的txt文本编辑器,否则键入逗号时编译通不过.应该是这个样('),不该是这个样(,). 2) 用数字做标号时,前面一定要加一个英文字母,否则编译通不过. 3) 有时编译通过的.asm ...