利用jquery 来操作 listbox和listbox内移动
function listbox_move(listfrom,listto)
{
var size = $("#" + listfrom + " option").size();
var selsize = $("#" + listfrom + " option:selected").size();
if(size>0 && selsize>0)
{
$.each($("#"+listfrom+" option:selected"), function(i,own){
// var stext = $(own).text();
// var svalue = $(own).val();
// $("#" + listto).append("<option value="" + svalue + "">" + stext + "</option>");
// $(own).remove();
$(own).appendto($("#" + listto));
$("#" + listfrom + "").children("option:first").attr("selected",true);
});
}
}
function listbox_order(listname,action)
{
var size = $("#"+listname+" option").size();
var selsize = $("#"+listname+" option:selected").size();
if(size > 0 && selsize > 0)
{
$.each($("#"+listname+" option:selected"),function(i,own){
if(action == "up")
{
$(own).prev().insertafter($(own));
}
else if(action == "down")//down时选中多个连靠则操作没效果
{
$(own).next().insertbefore($(own));
}
})
}
}
下面看一款详细代码
/*
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: 320, //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]==1?'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] = 1;
}else{
json[p.isgroupcolumn] = 0;
}
$(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=0;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:20 * 1000,
url: p.url,
async:false,
data: para,
datatype: p.datatype,
success: function(data){
if(data.state == 1)
{
$(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 = 600;
}
var mdivwidth = 80;
//init div
d.adiv = document.createelement('div');
d.ldiv = document.createelement('div');
$(d.ldiv).addclass('twowaylist-oldiv').width((p.width - mdivwidth) /2 ).height(p.height);
d.rdiv = document.createelement('div');
$(d.rdiv).addclass('twowaylist-oldiv').width((p.width - mdivwidth) /2 ).height(p.height);
d.mdiv = document.createelement('div');
$(d.mdiv).width(mdivwidth);
d.mtable = document.createelement('table');
d.mtable.cellpadding = 0;
d.mtable.cellspacing = 0;
//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:20})
;
//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);