webForumDet fria alternativet

Återanvända Selectlista?

12 svar · 308 visningar · startad av solbulle

solbulleMedlem sedan mars 20015 287 inlägg
#1

Jag har ett formulär som börjar växa lite väl mycket.
Sidan är uppbyggd av asp som genererar en selectlista som jag vill ha på upp till tolv olika ställen.
Det hela handlar om namn som man kan välja till olika befattningar.
Frågan lyder, kan jag lägga in mina poster/val på endast ett ställe och sen på något sätt hämta/visa flera selectlistor dynamiskt på något sätt?

Jag har sneglat lite på denna som också verkar sund när det börjar dra iväg med poster i listan. http://www.jojoxx.net/jscript/archive/formsearchlist.html
Kanske det är något som man kan bygga vidare på?

Som det är nu blir sidan på runt 3000 rader och det är bara början.

JojoxxMedlem sedan juni 20004 308 inlägg
#2
<script language="JavaScript" type="text/javascript">
lists=new Array("myform","otherform");
var content=new Array("value 1","Text 1","value 2","Text 2","value 3","Text 3");
window.onload=function(){
	for(var l=0;l<lists.length;l++){
	for(var a=0;a<content.length;a+=2){
		document.forms[lists[l]].lista.length++;
		document.forms[lists[l]].lista[a/2].value=content[a];
		document.forms[lists[l]].lista[a/2].text=content[a+1];
	}
	}
}

</script>
<form name="myform"><select name="lista"></select></form>
<form name="otherform"><select name="lista"></select></form>

... eller?

solbulleMedlem sedan mars 20015 287 inlägg
#3

Snudd på perfekt!

Skulle man kunna ändra så att istället fär att ha olika forms i den första arrayen så har man selectens namn? Så att alla kan ligga i samma formulär?

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Så här...

<script language="JavaScript" type="text/javascript">
lists=new Array("lista","listb");
var content=new Array("value 1","Text 1","value 2","Text 2","value 3","Text 3");
window.onload=function(){
	for(var l=0;l<lists.length;l++){
	for(var a=0;a<content.length;a+=2){
		document.forms['myform'].elements[lists[l]].length++;
		document.forms['myform'].elements[lists[l]][a/2].value=content[a];
		document.forms['myform'].elements[lists[l]][a/2].text=content[a+1];
	}
	}
}
</script>
<form name="myform"><select name="lista"></select><select name="listb"></select></form>
solbulleMedlem sedan mars 20015 287 inlägg
#5

Kalas!

Det är ju så lysande så att det är helt fantastiskt.

Nu har jag knåpat om mitt orginalscript, bra mycket vackrare kod blev det. :)
Skalade bort 50 rader i koden samt 600 rader kod ur den genererade källlkoden. (Med en liten testdatabas.)
Tackar. :)

JojoxxMedlem sedan juni 20004 308 inlägg
#6

You are most welcome.

solbulleMedlem sedan mars 20015 287 inlägg
#7

Nu fick jag ännu en strålande ide.

Jag har i mitt formulär dessa selectlistor samt även textinput om man inte tycker namnen duger. Då läggs dessa nya in i db.
En koll att de nya namnet inte redan finns har jag tills nu gjort på serversidan, men nu när jag har mina namn i en fin array kanske det inte skulle vara så dumt att göra kollen på klientsidan.

Nu ser min kod ut så här dock:

var content=new Array("0","Välj person","1","Börje Hansson","3","Nisse Lundberg","5","Kalle Anka");

Denna array byggs upp dynamiskt från två tabeller som lägger in förnamn samt efternamn.
I formuläret som har tolv liknande satser ser det ut så här:

<select name="Huvudroll" class="input"></select> 
<input name=firstnameHuvudroll size=15>
<input name=lastnameHuvudroll size=15>

Hm.. sen ska jag ju ha en koll om man valt i selecten ska man inte kunna skriva i, eller det kanske man ska kunna..? Fnular på det.

solbulleMedlem sedan mars 20015 287 inlägg
solbulleMedlem sedan mars 20015 287 inlägg
#9

Det går framåt, detta fungerar bra. Lite mer dynamik i formfältshämtandet ska till, namnen har jag ju till viss del i min ena array, kanske kan vara något? Men nu blir det nog knopplåda ikväll.

<script language="JavaScript" type="text/javascript">
lists=new Array("listaett","listatva","listatre");
var content=new Array("value 1","Text 1","value 2","Text 2","value 3","Text 3","value 4","TEXT 4");
window.onload=function(){

	for(var l=0;l<lists.length;l++){
	for(var a=0;a<content.length;a+=2){
		document.forms['myform'].elements[lists[l]].length++;
		document.forms['myform'].elements[lists[l]][a/2].value=content[a];
		document.forms['myform'].elements[lists[l]][a/2].text=content[a+1];
	}
	}
}

function chkUnique(arrStringArray) {

var strNewCat = document.myform.firstnameHuvudroll.value+" "+document.myform.lastnameHuvudroll.value;

	for (var i = 0; i < arrStringArray.length; i++) {
		//alert (arrStringArray[i])
		if (arrStringArray[i].toUpperCase() == strNewCat.toUpperCase()) { alert('Detta kategorinamn finns redan!'); } else { }
	}
}
</script>

<form name="myform">
<select name="listaett"></select>
<select name="listatva"></select>
<select name="listatre"></select>
<input name=firstnameHuvudroll size=15>
<input name=lastnameHuvudroll size=15>
<input name=firstnameHuvudroll2 size=15>
<input name=lastnameHuvudroll2 size=15>
<input type="text" name="txtfield" value="">
<input type="button" name="knapp" value="Checka" OnClick="javascript:chkUnique(content)">
</form>
solbulleMedlem sedan mars 20015 287 inlägg
#10

Så får det bli.

function chkUnique(arrStringArray) {

	for (var p = 0; p < lists.length; p++) {

		strfirstfield = "document.myform.firstname"+lists[p]+".value";
		strlasstfield = "document.myform.lastname"+lists[p]+".value";
		strNewfield = eval(strfirstfield)+" "+eval(strlasstfield);

	for (var t = 1; t < arrStringArray.length; t+=2) {

		if (arrStringArray[t].toUpperCase() == strNewfield.toUpperCase()) { alert(arrStringArray[t]+' finns redan inlagd!\nVälj '+arrStringArray[t]+' i selectlistan.'); } else { }
		}
	}
}
</script>
colioneMedlem sedan juni 20014 421 inlägg
#11

All heder åt solbulle som visar sina steg och hur det färdiga resultatet blir. :bire :bire :bire

JojoxxMedlem sedan juni 20004 308 inlägg
#12

Själv har jag sovit gott hela natten ;)

solbulleMedlem sedan mars 20015 287 inlägg
#13

:r Jo, man fick ju pyssla lite för att klara av det.
Men var säker, jag har fler frågor i lilla frågelådan. :e

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