本文来之于: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. Lesson 1: What is design? Why is it important?

    Week 2: What is design? Why is it important? Article 1: Startups, this is how design works. It's a s ...

  2. <display:column>属性解释

    参考官方网站:http://www.displaytag.org/1.2/displaytag/tagreference.html 所有属性: autolink,class,comparator,de ...

  3. JQ 遍历节点

    .children() : 取得匹配元素的子元素集合 .next() :取得匹配元素后面紧邻的同辈元素 .prev() :取得匹配元素前面紧邻的同辈元素 .siblings() :取得匹配元素前.后的 ...

  4. 转载:对#!/bin/sh的认识

    转载网址:http://blog.163.com/hashes@yeah/blog/static/16867631220101029847420/ 对#!/bin/sh的认识 第一次学shell编程, ...

  5. wordpress禁止调用官方Gravatar头像调用ssl头像链接提升加载速度

    在主题中的functions.php文件末尾加上以下代码即可(外观>编辑>functions.php) //官方Gravatar头像调用ssl头像链接 function get_ssl_a ...

  6. C语言初学 俩数相除问题

    #include<stdio.h> #include<stdlib.h> main() { double a,b;                       scanf(&q ...

  7. 『安全工具』目录扫描 DirBuster AND 御剑

    要想熟悉目标网站的体系架构,知道网站有哪些目录是必不可少的 向AWVS,Burp类大型扫描工具也可以进行目录扫描,不过个人感觉远没有专业扫描工具来的简单,实在 0x 01 DirBuster 简介:D ...

  8. 编译内核时出错:/bin/sh: 1: lzop: not found

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/71477.aspx 在上面链接中,发现时缺少了 lzop 工 ...

  9. cf B. Levko and Permutation

    http://codeforces.com/contest/361/problem/B #include <cstdio> #include <cstring> #includ ...

  10. 技巧两种:LINUX删除指定后缀文件及PYTHON更改屏幕字色

    http://blog.csdn.net/caryaliu/article/details/8753028 http://www.iitshare.com/python-print-color-log ...