webForumDet fria alternativet

Select All()

JavaScript

6 svar · 225 visningar · startad av jimpa

Medlem sedan jan. 2001361 inlägg
Frågan#1

Hej
Jag använder detta script för flytta options mellan 1 par selectboxar. Om du tittar på funtionen "allSelect()" så selectar den alla options i angiven selectbox vid submit. Detta funkar ju bra när jag bara har 1 par select boxar. Hur kan få detta dynamiskt så att jag kan aävända flere par select boxar?

<SCRIPT LANGUAGE="JavaScript">
<!--

function copyToList(from,to)
{
	fromList = eval('document.forms[0].' + from);
	toList = eval('document.forms[0].' + to);
	if (toList.options.length > 0 && toList.options[0].value == 'temp')
	{
		toList.options.length = 0;
	}
	var sel = false;
	for (i=0;i<fromList.options.length;i++)
	{
		var current = fromList.options[i];
		if (current.selected)
		{
			sel = true;
			if (current.value == 'temp')
			{
				alert ('You cannot move this text!');
				return;
			}
			txt = current.text;
			val = current.value;
			toList.options[toList.length] = new Option(txt,val);
			fromList.options[i] = null;
			i--;
		}
	}
	if (!sel) alert ('You haven\'t selected any options!');
}

function allSelect()
{
  List = document.forms[0].chosen;
  if (List.length && List.options[0].value == 'temp') return;
  for (i=0;i<List.length;i++)
  {
     List.options[i].selected = true;
  }
}
// -->
</SCRIPT>

Formuläret (med två par selectboxar)

<FORM onSubmit="allSelect(); return false">
<TABLE CELLPADDING=10 CELLSPACING=0 BORDER=1>
<TR><TD><P>Possible options:<BR>
<SELECT NAME="possible" SIZE="4" MULTIPLE WIDTH=200 STYLE="width: 200px">
<OPTION VALUE="1">Option 1: House</OPTION>
<OPTION VALUE="2">Option 2: Chamber</OPTION>
<OPTION VALUE="3">Option 3: Kitchen</OPTION>
<OPTION VALUE="4">Option 4: Garden</OPTION>

</SELECT></TD>
<TD><A HREF="javascript:copyToList('possible','chosen')">--&gt;</A><BR>
<A HREF="javascript:copyToList('chosen','possible')">&lt;--</A></TD>
<TD><P>Chosen options:<BR>
<SELECT NAME="chosen" SIZE="4" MULTIPLE WIDTH=200 STYLE="width: 200px">
<OPTION VALUE="temp">Make your choice on the left
</SELECT></TD></TR>
<TR><TD COLSPAN=3 ALIGn=center></TD></TR>
</TABLE>

<TABLE CELLPADDING=10 CELLSPACING=0 BORDER=1>
<TR><TD><P>Possible options:<BR>
<SELECT NAME="possible2" SIZE="4" MULTIPLE WIDTH=200 STYLE="width: 200px">
<OPTION VALUE="1">Option 1: House</OPTION>
<OPTION VALUE="2">Option 2: Chamber</OPTION>
<OPTION VALUE="3">Option 3: Kitchen</OPTION>
<OPTION VALUE="4">Option 4: Garden</OPTION>

</SELECT></TD>
<TD><A HREF="javascript:copyToList('possible2','chosen2')">--&gt;</A><BR>
<A HREF="javascript:copyToList('chosen2','possible2')">&lt;--</A></TD>
<TD><P>Chosen options:<BR>
<SELECT NAME="chosen2" SIZE="4" MULTIPLE WIDTH=200 STYLE="width: 200px">
<OPTION VALUE="temp">Make your choice on the left
</SELECT></TD></TR>
<TR><TD COLSPAN=3 ALIGn=center><INPUT TYPE=submit VALUE="submit"></TD></TR>
</TABLE>
</FORM>

Mvh Jimpa

Medlem sedan juni 20004 308 inlägg
#2
function allSelect()
{
  Lists=[document.forms[0].chosen,document.forms[0].chosen2];
  for(var i in Lists){
    List = Lists[i];
    if (List.length && List.options[0].value == 'temp') return;
    for (i=0;i<List.length;i++)
    {
       List.options[i].selected = true;
    }
  }
}
Medlem sedan jan. 2001361 inlägg
#3

Ja nästan så, men dock inte riktigt :)

Problemet är åxo att jag lopar ut x antal "par select boxar" från en databas villket innebär att jag inte vet hur många "chosen" det blir!

Formuläret skulle kunna ha "chosen1", "chosen2","chosen3","chosen4" etc...

Formuläret (med två par selectboxar)

Skulle kan alltså vara ett formulär med (10 par selectboxar)

Medlem sedan juni 20004 308 inlägg
#4

Det är inga problem. Eftersom du loopar fram select-listorna från en databas använder du någon form av serverside-script (asp, php, xyz). Fyll bara på med listornas namn på denna rad:

Lists=[[red]document.forms[0].chosen,document.forms[0].chosen2[/red]];
Medlem sedan jan. 2001361 inlägg
#5

Får det inte att funka riktigt. Har gjort in funktion som hämtar en sträng med alla formlärs namn, typ:document.forms[0].chosen,document.forms[0].chosen2,document.forms[0].chosen3,document.forms[0].chosen4

Anropar funktionen så här:

<form name="form" method="POST" action="Update.asp" onSubmit="allSelect('<% Call getList() %>')">

Funktionen:

function allSelect(myList)
{
  List = myList
  if (List.length && List.options[0].value == 'temp') return;
  for (i=0;i<List.length;i++)
  {
     List.options[i].selected = true;
  }
}

Jag får inget felmeddelande men ingenting funkar! Någon som kan se vad jag gör för fel?

Medlem sedan dec. 20025 483 inlägg
#6
function allSelect(myList)
{
  Lists=myList.split(',');
  for(var i in Lists){
    List = eval(Lists[i]);
    if (List.length && List.options[0].value == 'temp') return;
    for (i=0;i<List.length;i++)
    {
       List.options[i].selected = true;
    }
  }
}

:)

Medlem sedan jan. 2001361 inlägg
#7

Tackar!!
Nu funkar det åtmintonde i IE!
När jag provar i Mozilla så funkar det också men efter att formuläret har submitats och informationen har sparats så redirectas man tillbaka tilll formulärs sidan, men då helt plöstligt funkar det inte :l det gåt inte ens att flytta options mellan fälten, det gjorde innan!

Någon som har en aning?

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