webForumDet fria alternativet

Markera val i <select>

5 svar · 255 visningar · startad av SilvioF

SilvioFMedlem sedan juni 2000585 inlägg
#1

Jag har en <select> som genereras dynamiskt (countyID). När man ändrar någonting i denna (onChange) så anropas en funktion som bygger en annan lista(cityID) i mitt formulär.

Detta går alldeles utmärkt.
Det är när jag skickar formuläret som det uppstår problem. Formuläret innehåller en massa saker som skall fyllas i vid registrering av annonser.

När jag postar denna till en sida så kör jag lite asp-kod som kontrollerar en del saker i databasen. Har inte vissa villkort uppfyllts så skickas man tillbaka till formuläret. Jag skickar då även med de värden som man har fyllt formuläret med, allt för att man skall slippa fylla i allting igen.

Allting fungerar bra tills att jag skall välja vilken ort man har valt (cityID).

Jag använder mig av följande funktion för att generera countyID (det körs via ett Remote Scripting-object och funkar fint):

function getCounty(countyID)
			{
				GetModels();
			}

Efter att countyID har genererats så använder jag mig av denna fuynktion för att kontrollera och markera det val man gjorde innan man skickade formuläret:

function getCity(cityID)
			{
				for (var j=0; j<document.frmRegister.cityID.options.length; j++)
				{
					if(document.frmRegister.cityID.options[j].value== cityID)
					{
						document.frmRegister.cityID.options[j].selected=true;break;
					}
				}
			}

Enda problemet är att den inte markerar något val i cityID utan helt enkelt ställer sig på första posten, även om det är den tredje som skickades.

Om nu inte förstår hur jag menar så kan ni kolla på http://fumei.dyndns.org/temp/login/register.asp för att se hur sidan ser ut. Testa med att välja ett län och ort, tryck därefter på "Registrera".

JojoxxMedlem sedan juni 20004 306 inlägg
#2

Prova att byta ut;

document.frmRegister.cityID.options[j].selected=true;break;

mot;

document.frmRegister.cityID.selectedIndex=j;break;

Detta förutsätter dock att den genererade listan har ett value (attribut) som överensstämmer med cityID. I annat fall får du byta ut;

if(document.frmRegister.cityID.options[j].value== cityID)

mot;

if(document.frmRegister.cityID.options[j].text== cityID)

för att istället för att jämföra värdet på listposten jämföra texten som den innehåller.

<option value="värde">text</option>

SilvioFMedlem sedan juni 2000585 inlägg
#3

Nix, det funakde inte med något av de alternativen.

dectgapMedlem sedan sep. 20021 542 inlägg
#4

Till att börja med har du i funktionen getCity() en inparameter med samma namn som ett element i formuläret (cityID). Det kan nog ställa till en del bekymmer t ex här:

document.frmRegister.cityID.options.length

Eftersom inparametern cityID är ett tal (beroende på vilken stad man har valt) kanske den letar efter något element i formuläret som kallas för det talet.

I funktionen gör du dessutom denna kollen

document.frmRegister.cityID.options[j].innerText == cityID

innerText för en stad ska ju vara namnet på staden medan cityID är ett tal, så den kollen kommer ju aldrig att bli true.

SilvioFMedlem sedan juni 2000585 inlägg
#5
function getCounty(countyID)
{
	GetModels();
}

function getCity(cityID)
{
	for (var j = 0; j < document.frmRegister.cityID.options.length; j++)
	{
		if(document.frmRegister.cityID.options[j].value == cityID)
		{
			document.frmRegister.cityID.options[j].selected=true;
			break;
		}
	}
}

cityID (värdet på in-värdet) är ett tal och finns i select-listan efter att getCounty(countyID) har körts och fyllt <selec name=cityID"> ordentligt.

Men det fungerar ändå inte.

SilvioFMedlem sedan juni 2000585 inlägg
#6

Löste det själv nu. Jag flyttade på kontrollen in i en annan funktion (RSGetModels) och då fungerade det utmärkt. Det är otroligt vad några timmars sömn kan göra. :D

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb