en liten
for(var i=0; i<box.options.length; i++) {
box.options.selected=true;
}
borde räcka. En annan variant är att vid OnSubmit flytta över alla rader i listan till ett hiddenfält, och separera med något bra tecken.
29 svar · 1 934 visningar · startad av PatrikB
hello,
finns det någon vänlig själ som kan fixa detta lilla problem som jag har.
Det är så att jag listar upp en del värden i en listbox. Med hjälp av en submit-knapp "förflyttar" man det valda objectet över till den andra listboxen.
Jag har redan ett script för det:
<SCRIPT LANGUAGE="JavaScript">
<!--
sortitems = 1; // Automatically sort items within lists? (1 or 0)
function move(fbox,tbox) {
for(var i=0; i<fbox.options.length; i++) {
if(fbox.options.selected && fbox.options.value != "") {
var no = new Option();
no.value = fbox.options.value;
no.text = fbox.options.text;
tbox.options[tbox.options.length] = no;
fbox.options.value = "";
fbox.options.text = "";
fbox.options.selected = 1;
}
}
BumpUp(fbox);
if (sortitems) SortD(tbox);
}
function BumpUp(box) {
for(var i=0; i<box.options.length; i++) {
if(box.options.value == "") {
for(var j=i; j<box.options.length-1; j++) {
box.options[j].value = box.options[j+1].value;
box.options[j].text = box.options[j+1].text;
}
var ln = i;
break;
}
}
if(ln < box.options.length) {
box.options.length -= 1;
BumpUp(box);
}
}
function SortD(box) {
var temp_opts = new Array();
var temp = new Object();
for(var i=0; i<box.options.length; i++) {
temp_opts = box.options;
}
for(var x=0; x<temp_opts.length-1; x++) {
for(var y=(x+1); y<temp_opts.length; y++) {
if(temp_opts[x].text > temp_opts[y].text) {
temp = temp_opts[x].text;
temp_opts[x].text = temp_opts[y].text;
temp_opts[y].text = temp;
}
}
}
for(var i=0; i<box.options.length; i++) {
box.options.value = temp_opts.value;
box.options.text = temp_opts.text;
}
}
// -->
</script>
Problemet nu är att jag vill att de man har förflyttat över ska bli markerade så att man med hjälpa av ASP ska kunna få "användning" för dessa.
Hoppas att det var någon som förstod vad jag menar ... och som kan hjälpa till och lösa detta problems ...
cu all l8er
/PatrikB
en liten
for(var i=0; i<box.options.length; i++) {
box.options.selected=true;
}
borde räcka. En annan variant är att vid OnSubmit flytta över alla rader i listan till ett hiddenfält, och separera med något bra tecken.
Hej!
Jag använder samma kodexempel och sitter med samma problem just nu och kan tyvärr inte mycke javascript, så jag skulle bli jätteglad om någon kunde förklara lite mera ingående hur, (gärna exempel), man med hjälp av OnSubmit flyttar över alla rader i listan till ett hiddenfält, och separerar detta med något bra tecken.
Ursäkta solbulle. Detta är andra gången inom loppet av 2 dagar som jag klickar på redigera-knappen istället för "skriv inlägg". Jag lovar att skärpa mig :)
Här är svaret på din fråga i alla fall.
function Moveup(dbox) {
for(var i = 0; i < dbox.options.length; i++) {
if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i] != dbox.options[0]) {
var tmpval = dbox.options[i].value;
var tmpval2 = dbox.options[i].text;
dbox.options[i].value = dbox.options[i - 1].value;
dbox.options[i].text = dbox.options[i - 1].text
dbox.options[i-1].value = tmpval;
dbox.options[i-1].text = tmpval2;
dbox.selectedIndex=i;
}
}
}
[Redigerat av en trött Jojoxx den 18 jan 2002]
[Redigerat av Jojoxx den 18 jan 2002]
Där ser man så det kan bli, nästan så att man får svaret innan frågan är ställd så att säga :)
:( Tyvärr vill det sig inte som jag vill, när jag gör som du skrivit "förstör" jag lite av den tidigare funktionen när jag flyttar över värdena till denna listbox.
Jag vill helst att när jag först kör den första funktionen och värdena flyttas över så skall de hamna längst ner i den andra boxen. (Vilket de gör orginal) Sen när man markerar en post i dne "nya" boxen och kör Moveup-funktionen vill jag att den post man markerat och därmed flyttat skall vara fortsatt markerad så aatt om man vill flytta upp den ett steg till ska man inte behöva markera den igen.
Är deta möjligt tro?
------------------
/solbulle
Hemmabio | Spelautomater | The Who
Ja, så här skall det ju vara :)
function Moveup(dbox) {
if(dbox.selectedIndex>0){
for(var i = 0; i < dbox.options.length; i++) {
if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i] != dbox.options[0]) {
var tmpval = dbox.options[i].value;
var tmpval2 = dbox.options[i].text;
dbox.options[i].value = dbox.options[i - 1].value;
dbox.options[i].text = dbox.options[i - 1].text
dbox.options[i-1].value = tmpval;
dbox.options[i-1].text = tmpval2;
}
}
dbox.selectedIndex--;
}
}
------------------
/ J
SUPERBRA!
Precis som jag vill ha det, kvalitet.
Tackar.
------------------
/solbulle
Hemmabio | Spelautomater | The Who
Jag vet inte riktigt om detta är möjligt överhuvudtaget, men men ett försök i alla fall.
I min "nya" selectbox vill jag efter att jag sorterat dom med funktionen Moveup kunna spara alla poster/rader med dess gamla value (från den första selecten) samt det nya valuet som kommer utav placeringen i den nya boxen.
Går det och hur göra egentligen?
Vidare skulle jag om möjlig byta texten i boxen, lägga till en siffra som sätter ut placeringen.
Lite lösryck kod:
function Moveup(dbox) {
if(dbox.selectedIndex>0){
for(var i = 0; i < dbox.options.length; i++) {
if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i] != dbox.options[0]) {
var tmpval = dbox.options[i].value;
var tmpval2 = dbox.options[i].text;
dbox.options[i].value = dbox.options[i - 1].value;
splitstringt = (dbox.options[i - 1].text).split(". ");
tmpva22 = splitstringt[1]
dbox.options[i].text = (1+dbox.selectedIndex) + ". "+ tmpva22
dbox.options[i-1].value = tmpval;
splitstring = tmpval2.split(". ");
tmpval2 = splitstring[1]
dbox.options[i-1].text = (dbox.selectedIndex) + ". " + tmpval2;
}
}
dbox.selectedIndex--;
}
}
Detta fixar till det hela vid förflyttning på just den aktuella raden.
Men i Move-funktionen, hur får jag in värdet där?
OM det nu går att göra så här och om jag verkligen fortfarande kan komma åt mitt ursprungliga value???
------------------
/solbulle
Hemmabio | Spelautomater | The Who
Ok, nu har jag fått till min lilla hjälpnumrering, den egentliga frågan om jag nu någonsin ska få användning för denna lilla grej är om jag kan få ut "det ingående valuet" samt sedan även positionen i selectboxen?
Kan jag det?
------------------
/solbulle
Hemmabio | Spelautomater | The Who
[Redigerat av solbulle den 19 jan 2002]
Ok, jag frtsätter i min lilla enmannatråd :)
Har nog löst det nu, ska bara putsa till det lite sen lägge jag upp det här så har ni världens bästa funktion att tillgå! (hupp...)
------------------
/solbulle
Hemmabio | Spelautomater | The Who
Så här ser det ut nu:
<SCRIPT LANGUAGE="JavaScript">
<!--
sortitems = 0; // Automatically sort items within lists? (1 or 0)
laggtill ="1"
tabort ="2"
function move(fbox,tbox,vad) {
for(var i=0; i<fbox.options.length; i++) {
if(fbox.options[i].selected && fbox.options[i].value != "") {
var no = new Option();
no.value = fbox.options[i].value;
no.text = fbox.options[i].text;
po = tbox.selectedIndex--;
if(vad == laggtill)
{
var boxLength = fbox.length;
boxLength = (11-boxLength)
tut = fbox.options[i].value
no.text = boxLength + ". " + no.text;}
else if(vad == tabort)
{
splitstr = no.text
splitstring = splitstr.split(". ");
no.text = splitstring[1]
}
tbox.options[tbox.options.length] = no;
fbox.options[i].value = "";
fbox.options[i].text = "";
fbox.options[i].selected = 1;
}
}
BumpUp(fbox);
if (sortitems) SortD(tbox);
if(document.formen.checkbox.checked){
SortD(fbox);
}
}
function BumpUp(box) {
for(var i=0; i<box.options.length; i++) {
if(box.options[i].value == "") {
for(var j=i; j<box.options.length-1; j++) {
box.options[j].value = box.options[j+1].value;
box.options[j].text = box.options[j+1].text;
}
var ln = i;
break;
}
}
if(ln < box.options.length) {
box.options.length -= 1;
BumpUp(box);
}
}
function SortD(box) {
var temp_opts = new Array();
var temp = new Object();
for(var i=0; i<box.options.length; i++) {
temp_opts[i] = box.options[i];
}
for(var x=0; x<temp_opts.length-1; x++) {
for(var y=(x+1); y<temp_opts.length; y++) {
if(temp_opts[x].text > temp_opts[y].text) {
temp = temp_opts[x].text;
temp_opts[x].text = temp_opts[y].text;
temp_opts[y].text = temp;
}
}
}
for(var i=0; i<box.options.length; i++) {
box.options[i].value = temp_opts[i].value;
box.options[i].text = temp_opts[i].text;
}
}
function remove(box) {
for(var i=0; i<box.options.length; i++) {
if(box.options[i].selected && box.options[i] != "") {
box.options[i].value = "";
box.options[i].text = "";
}
}
BumpUp(box);
}
function Moveup(dbox) {
if(dbox.selectedIndex>0){
for(var i = 0; i < dbox.options.length; i++) {
if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i] != dbox.options[0]) {
var tmpval = dbox.options[i].value;
var tmpval2 = dbox.options[i].text;
dbox.options[i].value = dbox.options[i - 1].value;
splitstringt = (dbox.options[i - 1].text).split(". ");
tmpva22 = splitstringt[1]
dbox.options[i].text = (1+dbox.selectedIndex) + ". "+ tmpva22
dbox.options[i-1].value = tmpval;
splitstring = tmpval2.split(". ");
tmpval2 = splitstring[1]
dbox.options[i-1].text = (dbox.selectedIndex) + ". " + tmpval2;
}
}
dbox.selectedIndex--;
}
}
function Movedown(ebox) {
if(ebox.selectedIndex>-1){
for(var i = 0; i < ebox.options.length; i++) {
if (ebox.options[i].selected && ebox.options[i] != "" && ebox.options[i+1] != ebox.options[ebox.options.length]) {
var tmpval = ebox.options[i].value;
var tmpval2 = ebox.options[i].text;
ebox.options[i].value = ebox.options[i + 1].value;
splitstringt = (ebox.options[i + 1].text).split(". ");
tmpva22 = splitstringt[1]
ebox.options[i].text = (1+ebox.selectedIndex) + ". "+ tmpva22
ebox.options[i+1].value = tmpval;
splitstring = tmpval2.split(". ");
tmpval2 = splitstring[1]
ebox.options[i+1].text = (2+ebox.selectedIndex) + ". " + tmpval2;
}
}
ebox.selectedIndex++;
}
}
function saveMe() {
var strValues = "";
var boxLength = document.formen.list2.length;
var count = 0;
if (boxLength != 0) {
for (i = 0; i < boxLength; i++) {
if (count == 0) {
strValues = document.formen.list2.options[i].value;
}
else {
strValues = strValues + "," + document.formen.list2.options[i].value;
}
count++;
}
}
if (strValues.length == 0) {
alert("Listan är tom!");
}
else {
document.formen.textfield.value = strValues
alert("Dina val, i ordning:\r\n(Se nu till att gör nytta av dom!)\r\n" + strValues);
}
}
// -->
</script>
Nu måste jag iofs kanske knalla över till aspforumet för nu ska jag till att sätta in selectvärdena i boxarna dynamiskt. Dock så klarar mina funktioner här inte av poster i den "andra" selectboxen från början, men jag tänkte att man kanske om inte annat kan lösa det med ett onloadscript som direkt flyttar över en del poster från första selecten?
Någon?
Sen funkar inte "omnumreringen" när jag flyttar tillbaks en post, någon?
------------------
/solbulle
Hemmabio | Spelautomater | The Who
function loadmove(fbox,tbox,vad,vilken)
{
if(vilken > -1){
i = vilken
var no = new Option();
no.value = fbox.options[i].value;
no.text = fbox.options[i].text;
po = tbox.selectedIndex--;
if(vad == laggtill)
{
var boxLength = fbox.length;
boxLength = (11-boxLength)
tut = fbox.options[i].value
no.text = boxLength + ". " + no.text;}
else if(vad == tabort)
{
splitstr = no.text
splitstring = splitstr.split(". ");
no.text = splitstring[1]
}
tbox.options[tbox.options.length] = no;
fbox.options[i].value = "";
fbox.options[i].text = "";
fbox.options[i].selected = 1;
}
Fast det lirar ju inte om jag kör det flera ggr på raken med de ursprungliga värdena... (positionen i selecten)
Hm...
------------------
/solbulle
Hemmabio | Spelautomater | The Who
Oh uj oj. Löst! Postar fullösning:
mystring ="3,4,9,1,2"
function ladda()
{
var ar=mystring.split(",");
for(var i=0; i<ar.length; i++) {
p = ar[i]-1
nummer = i+1
loadmove(document.formen.list3,document.formen.list2,laggtill,p,nummer);
}
for(var i=0; i<ar.length; i++) {
p = ar[i]-1
document.formen.list3.options[p].value = "";
document.formen.list3.options[p].text = "";
document.formen.list3.options[p].selected = 1;
}
BumpUp(document.formen.list3);
}
function loadmove(fbox,tbox,vad,vilken)
{
if(vilken > -1){
i = vilken
var no = new Option();
no.value = fbox.options[i].value;
no.text = fbox.options[i].text;
if(vad == laggtill)
{
no.text = nummer + ". " + no.text;}
else if(vad == tabort)
{
splitstr = no.text
splitstring = splitstr.split(". ");
no.text = splitstring[1]
}
tbox.options[tbox.options.length] = no;
}
...som man då kan slå ihop till en funktion när man sovit lite...
Tack för hjälpen solbulle!
------------------
/solbulle
Hemmabio | Spelautomater | The Who
[Redigerat av solbulle den 20 jan 2002]
Hej allihopa!
Jag vill använda denna funktionen ni pratar om, men jag skulle gärna ville se ett koddexempel och hur FORMULÄR koden ser ut?
Taksam för hjälp!
/ David
Här är någonting jag hade på lager:
<script type="text/javascript">
<!--
function move(s){
var
sel=document.forms["f"],
opt=sel.elements[s].options,
i=opt.length,
t=[],
j=null,
k=0,
b=false;
while(i-->0){
switch(opt[i].selected){
case false:
t.push(opt[i]);
break;
default:
b=true;
sel.elements[s=="n1"?"n2":"n1"].options[sel.elements[s=="n1"?"n2":"n1"].options.length] = new Option(opt[i].text);
}
}
j=t.length;
while(j-->0){
opt[k++] = new Option(t[j].text);
}
if(b) opt.length = opt.length-1;
};
//-->
</script>
...
<form onsubmit="return false" name="f">
<div style="float:left">
<select size="12" name="n1">
<option>Kol_1_1</option>
<option>Kol_1_2</option>
<option>Kol_1_3</option>
<option>Kol_1_4</option>
<option>Kol_1_5</option>
<option>Kol_1_6</option>
</select>
</div>
<div style="float:left;width:70px">
<div style="position:relative;top:60px;text-align:center">
<button onclick="move('n1')">--></button><br>
<button onclick="move('n2')"><--</button>
</div>
</div>
<div>
<select size="12" name="n2">
<option>Kol_2_1</option>
<option>Kol_2_2</option>
<option>Kol_2_3</option>
<option>Kol_2_4</option>
<option>Kol_2_5</option>
<option>Kol_2_6</option>
</select>
</div>
</form>
:)
Ja, den koden var kanon. :)
Men jag söker lite justeringar.
1. Jag vill att domman flyttar ska bli markerade i den nya listan.
2. Att sakerna man flyttar runt ska sorteras hela tiden så att dom ligger rätt.
Inte:
ACB
Utan:
ABC
EDIT: Jag vill även att man ska kunna använda värdena som man flyttar från den vänstra listan till denhögra. Alltså, ha en submitknapp som skickar iväg de värden som man har flyttat till lista två. Går det?
Tacksam för hjälp!
Edit: Nu skickas även värden med.
<script type="text/javascript">
<!--
function sortAndAdd(f,o){
var t = [], added=false, sel=null;
for( var i=0, elm; ( elm=f.options[i] ); i++ ){
if(!added && o.text < elm.text){
t.push(o);
sel=i;
added=true;
}
t.push(elm);
}
if(!added) t.push(o);
f.options.length=0;
for( var i=0, elm; ( elm=t[i] ); i++ )
f.options[i] = new Option(elm.text,elm.value);
f.options[typeof(sel)=="number"?sel:f.options.length-1].selected=true;
};
function move(s){
var
sel=document.forms["f"],
opt=sel.elements[s].options,
i=opt.length,
t=[],
j=null,
k=0,
b=false;
while(i-->0){
switch(opt[i].selected){
case false:
t.push(opt[i]);
break;
default:
b=true;
sortAndAdd(sel.elements[s=="n1"?"n2":"n1"], new Option(opt[i].text,opt[i].value));
}
}
j=t.length;
while(j-->0) opt[k++] = new Option(t[j].text,t[j].value);
if(b) opt.length = opt.length-1;
};
//-->
</script>
:)