EN sak till, hur fanken får jag så att jag med hjälp av en submitknapp skickar iväg all data i det högra fältet?
Jag får det inte att funka på vanligt vis. :(
29 svar · 1 934 visningar · startad av PatrikB · sida 2 av 2
EN sak till, hur fanken får jag så att jag med hjälp av en submitknapp skickar iväg all data i det högra fältet?
Jag får det inte att funka på vanligt vis. :(
Hoppsan, det var jag som glömde en sak:
<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>
Lagg till en "submit"-knapp och ta bort "onsubmit"-attributet från "form"-elementet så skall det fungera.
:)
Jag tackar så hemskt jättemycket. :)
Tur att det fortfarande finns människor som vill hjälpa andra. :)
Men en sak till. :)
Kan man göra så att dom automatiskt blir markerade i den "andra" listan?
alltså, att ALLA blir det?
Då får du lägga till attributet multiple i "select"-elementen och sätta dess värde till true. Därefter får du lägga till onsubmit-attributet igen och sätta värdet till selectAll(this). Sedan lägger du till följande funktion till de tidigare postade:
function selectAll(o){
outer:
for( var i=0, elm; ( elm=o.elements[i] ); i++ ){
if(elm.nodeName == "SELECT"){
for( var j=0, opt; ( opt=o.elements[i].options[j] ); j++ ){
if(opt.selected){
var t=o.elements[o.elements[i].name=="n1"?"n2":"n1"];
for( var k=0, temp; ( temp=t.options[k] ); k++ )
temp.selected=true;
break outer;
}
}
}
}
};
:)
Får det inte att fungera.
SELECT ser ut såhär:
<select size="12" name="n2" CLASS="select" MULTIPLE>
FORMULÄRET såhär:
<form action="test.asp" method="post" name="f" onSubmit="selectAll(this)">
Och koden såhär:
<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;
};
function selectAll(o){
outer:
for( var i=0, elm; ( elm=o.elements[i] ); i++ ){
if(elm.nodeName == "SELECT"){
for( var j=0, opt; ( opt=o.elements[i].options[j] ); j++ ){
if(opt.selected){
var t=o.elements[o.elements[i].name=="n1"?"n2":"n1"];
for( var k=0, temp; ( temp=t.options[k] ); k++ )
temp.selected=true;
break outer;
}
}
}
}
};
//-->
</script>
Jag vill att ALAL ska bli marekrade i lista 2.
Jag känner mig lite korkad nu. hehe.
Men vilket multiple ska sättas till true?
Det räcker ju att skriva MULTIPLE för att den funktionen ska funka, alltså att man kan markera alla med hjälp av o klicka på dom.
Jag vill ju att det ska skötas automatiskt.
Tacksam för all hjälp du ger mig.
/ David
EDIT: Funktionen funkar som jag vill att det ska om jag först flyttar dom jag vill ha i lista två, o sen markerar ett val i lista ett o sen klickar på submit knappen.
DÅ skivkas alal värden i lista två med.
Men inte annars. Inte så lätt för användaren att lista ut det. hehe.
Ok, så hela den andra listan skall skickas oavsett? Du byter du ut funktionen selectAll mot:
function selectAll(o){
var f=o.elements["n2"].options, j=f.length;
while(j-->0) f[j].selected = true;
};
Angående multiple; ja, det fungerar att skriva endast det, men det korrekta sättet är att även skriva ett värde för attributet.
:)