webForumDet fria alternativet

flytta värden från en listmeny till en annan samt till ett hidden field

JavaScript

2 svar · 281 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

har två listmenyer på en sida där jag kan flytta namn emellan varann.
kan nån vänlig själ bygga på detta script så att namnen man väljer också läggs i ett hidden field.
alltså: flyttar jag ett namn från den vänstra till den högra ska det namnet också läggas i hidden fältet,
och flyttar jag från höger till vänster ska namnet tas bort ur hidden fältet.

function moveSelectedOptions(from,to) {
	// Unselect matching options, if required
	if (arguments.length>3) {
		var regex = arguments[3];
		if (regex != "") {
			unSelectMatchingOptions(from,regex);
			}
		}
	// Move them over
	for (var i=0; i<from.options.length; i++) {
		var o = from.options[i];
		if (o.selected) {
			to.options[to.options.length] = new Option( o.text, o.value, false, false);
			}
		}
	// Delete them from original
	for (var i=(from.options.length-1); i>=0; i--) {
		var o = from.options[i];
		if (o.selected) {
			from.options[i] = null;
			}
		}
	if ((arguments.length<3) || (arguments[2]==true)) {
		sortSelect(from);
		sortSelect(to);
		}
	from.selectedIndex = -1;
	to.selectedIndex = -1;
	}

function sortSelect(obj) {
	var o = new Array();
	if (obj.options==null) { return; }
	for (var i=0; i<obj.options.length; i++) {
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
		}
	if (o.length==0) { return; }
	o = o.sort( 
		function(a,b) { 
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			} 
		);

	for (var i=0; i<o.length; i++) {
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
		}
	}
Medlem sedan juni 20004 308 inlägg
#2

Litet exempel, tillägget är alltså functionen sync och anropet till den.

<script type="text/javascript">
function moveSelectedOptions(from,to) {
	// Unselect matching options, if required
	if (arguments.length>3) {
		var regex = arguments[3];
		if (regex != "") {
			unSelectMatchingOptions(from,regex);
			}
		}
	// Move them over
	for (var i=0; i<from.options.length; i++) {
		var o = from.options[i];
		if (o.selected) {
			to.options[to.options.length] = new Option( o.text, o.value, false, false);
			}
		}
	// Delete them from original
	for (var i=(from.options.length-1); i>=0; i--) {
		var o = from.options[i];
		if (o.selected) {
			from.options[i] = null;
			}
		}
	if ((arguments.length<3) || (arguments[2]==true)) {
		sortSelect(from);
		sortSelect(to);
		}
	from.selectedIndex = -1;
	to.selectedIndex = -1;
	}

function sortSelect(obj) {
	var o = new Array();
	if (obj.options==null) { return; }
	for (var i=0; i<obj.options.length; i++) {
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
		}
	if (o.length==0) { return; }
	o = o.sort( 
		function(a,b) { 
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			} 
		);

	for (var i=0; i<o.length; i++) {
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
		}
	}
function sync(list,field){
	field.value="";
	for(var n=0;n<list.length;n++){
		field.value+=(field.value)?", "+list[n].text:list[n].text;
	}
}
</script>
<form>
<select name="foo" style="width:150px;" size="3">
<option value="Anders">Anders</option>
<option value="Bertil">Bertil</option>
<option value="Cesar">Cesar</option>
</select>
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(this.form.foo,this.form.bar); sync(this.form.bar,this.form.faa);">
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(this.form.bar,this.form.foo); sync(this.form.bar,this.form.faa);">
<select name="bar" style="width:150px;" size="3">
</select>
<input type="hidden" name="faa">
</form>

Functionen använder alltså listans "text". Vill du hellre använda listans value ändrar du list[n].text till list[n].value

Medlem sedan juni 20003 076 inlägg
#3

Suveränt! :bire

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