webForumDet fria alternativet

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

JavaScript

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

Frågan, 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,t

Läs frågan i sin helhet →
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. :(

Medlem 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.

:)

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?

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

:)

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.

Medlem sedan dec. 20025 483 inlägg
#26

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

:)

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.

Medlem 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.

:)

Medlem sedan feb. 2000153 inlägg
#29

PRECIS så. :))

Tack så hemskt mycket. :)

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

/ David

Medlem sedan dec. 20025 483 inlägg
#30

Tack detsamma! :bire

:)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)