webForumDet fria alternativet

Från Listbox -----> Listbox och ....

29 svar · 1 934 visningar · startad av PatrikB · sida 2 av 2

-torlejf-Medlem sedan feb. 2000153 inlägg
#21

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. :(

Peter SMedlem sedan dec. 20025 483 inlägg
#22

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.

:)

-torlejf-Medlem sedan feb. 2000153 inlägg
#23

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?

Peter SMedlem sedan dec. 20025 483 inlägg
#24

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;
				}
			}
		}
	}
};

:)

-torlejf-Medlem sedan feb. 2000153 inlägg
#25

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.

Peter SMedlem sedan dec. 20025 483 inlägg
#26

Du skulle sätta värdet för multiple till true ;)

:)

-torlejf-Medlem sedan feb. 2000153 inlägg
#27

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.

Peter SMedlem sedan dec. 20025 483 inlägg
#28

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.

:)

-torlejf-Medlem sedan feb. 2000153 inlägg
#29

PRECIS så. :))

Tack så hemskt mycket. :)

Ha en fortsatt trevlig kväll och Glad påsk!

/ David

Peter SMedlem sedan dec. 20025 483 inlägg
#30

Tack detsamma! :bire

:)

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)