webForumDet fria alternativet

Dynamisk drop down (select) i formulär

JavaScript

9 svar · 280 visningar · startad av danieleinad

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

Jag kan nästan ingen javascript men har hittat
ett gratisscript som jag försöker få ordning på.
Egentligen ska varje arraygrupp börja om på noll,
dvs t ex gul skulle vara Arrej[1][0]="Gul";
men jag vill ha det på detta löpande vis.
Problemet är att när den nya drop down-menyn (select)
skapas, skapas även ett antal tomma vita rader ovanför,
om jag t ex väljer färg i första menyn kommer tomma
vita rader för de tre frukterna också skapas,
hur kan jag få rätsida på detta?

Dessutom, går det att koppla en SELECTED-funktion till
detta, om t ex variabelerna huvud och sedan kommer med
värdena 3 resp 6 (alt endast att $sedan är 6), hur kan
jag då få "Bil" valt?

<FORM NAME="val">

<SELECT NAME="huvud" OnChange="SkapaVal(this.selectedIndex);">
<OPTION VALUE="1">Frukt</OPTION>
<OPTION VALUE="2">Färg</OPTION>
<OPTION VALUE="3">Färdmedel</OPTION>
</SELECT>
<SELECT NAME=\"sedan\">
<OPTION VALUE=\"\">Välj ovan först</OPTION>
</SELECT>
</FORM>

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

Arrej=new Array(3);
Arrej[0]=new Array(3);
Arrej[1]=new Array(2);
Arrej[2]=new Array(4);

Arrej[0][0]="Banan";
Arrej[0][1]="Apelsin";
Arrej[0][2]="Melon";

Arrej[1][3]="Gul";
Arrej[1][4]="vit";

Arrej[2][5]="Cykel";
Arrej[2][6]="Bil";
Arrej[2][7]="Buss";
Arrej[2][8]="Tunnelbana";

function SkapaVal(num)
{

document.val.sedan.selectedIndex=1;

for(ctr=0;ctr<Arrej[num].length;ctr++)
{
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr],[ctr]);
}

document.val.sedan.length=Arrej[num].length;
}
//--></Script>

Några synpunkter på scriptet i övrigt, kan det snyggas
till och snabbas upp?

Tusen tack på förhand!

MVH Daniel

Medlem sedan sep. 20021 655 inlägg
#2

Så här?

<FORM NAME="val">

<SELECT NAME="huvud" OnChange="SkapaVal(this.selectedIndex);">
<OPTION VALUE="1">Frukt</OPTION>
<OPTION VALUE="2">Färg</OPTION>
<OPTION VALUE="3">Färdmedel</OPTION>
</SELECT>
<SELECT NAME="sedan">
<OPTION VALUE="">Välj ovan först</OPTION>
</SELECT>
</FORM>

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

Arrej=new Array(3);
Arrej[0]=new Array(3);
Arrej[1]=new Array(2);
Arrej[2]=new Array(4);

Arrej[0][0]="Banan";
Arrej[0][1]="Apelsin";
Arrej[0][2]="Melon";

Arrej[1][0]="Gul";
Arrej[1][1]="vit";

Arrej[2][0]="Cykel";
Arrej[2][1]="Bil";
Arrej[2][2]="Buss";
Arrej[2][3]="Tunnelbana";

function SkapaVal(num)
{

document.val.sedan.options.length = Arrej[num].length;

for(ctr=0;ctr<Arrej[num].length;ctr++)
{
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr],[ctr]);
}

document.val.sedan.selectedIndex=0;
}
//--></Script>
Medlem sedan jan. 200430 inlägg
#3

Tack för den snabba hjälpen, men på detta sättet blir
ju värdena i sedan-valet inte löpande, vilket jag önskar.
Kan man kanske lägga till en tredje nivå i arrayen som
innehåller värdet?

MVH Daniel

Medlem sedan sep. 20021 655 inlägg
#4

För att ta emot sedans värde på nästa sida kan du ändra funktionen till:

function SkapaVal(num)
{

document.val.sedan.options.length = Arrej[num].length;

for(ctr=0;ctr<Arrej[num].length;ctr++)
{
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr],Arrej[num][ctr]);
}

document.val.sedan.selectedIndex=0;
}

Hur menar du att den andra rullgardinsmenyn ska vara löpande? Ska den fyllas på med nya värden ifall ett nytt val görs i "huvud"? Vad ska i så fall hända om man väljer "Färg", "Frukt" och sedan "Färg" igen?

Medlem sedan jan. 200430 inlägg
#5

Som jag har förstått det är det t ex 2:an i
Arrej[0][2]="Melon";
som är värdet på "sedan" (select-menyn),
dvs värdet är inte "Melon".
Men jag kanske har förstått fel, om jag vill
att värdet ska vara "2" kanske man måste
lägga till något mer?

Medlem sedan sep. 20021 655 inlägg
#6

Vilket värde ett alternativ ska ha anger du här:

new Option(x,y)

x är den text som ska stå i menyn och y är värdet på alternativet.
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/option.html
Jämför hur du hade skrivit det i funktionen med hur jag skrev det i senaste inlägget.

Medlem sedan jan. 200430 inlägg
#7

Så som koden är nu kommer värdet på "sedan" att vara
t ex "Melon", och inte någon siffra. Kan jag lägga till ännu
en siffra, t ex Arrej[0][2][4]="Melon"; och sedan använda
"4" till att vara värde för sedan, genom att göra en förändring
i raden
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr],Arrej[num][ctr]);

?

Medlem sedan sep. 20021 655 inlägg
#8

I så fall kan du skriva så här:

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

Arrej=new Array(3);
Arrej[0]=new Array(3);
Arrej[1]=new Array(2);
Arrej[2]=new Array(4);

Arrej[0][0]=new Array("Banan", 0);
Arrej[0][1]=new Array("Apelsin", 1);
Arrej[0][2]=new Array("Melon", 2);

Arrej[1][0]=new Array("Gul", 3);
Arrej[1][1]=new Array("vit", 4);

Arrej[2][0]=new Array("Cykel", 5);
Arrej[2][1]=new Array("Bil", 6);
Arrej[2][2]=new Array("Buss", 7);
Arrej[2][3]=new Array("Tunnelbana", 8);

function SkapaVal(num)
{

document.val.sedan.options.length = Arrej[num].length;

for(ctr=0;ctr<Arrej[num].length;ctr++)
{
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr][0],Arrej[num][ctr][1]);
}

document.val.sedan.selectedIndex=0;
}
//--></Script>

Eller , med lite mindre kod:

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

Arrej=new Array(3);
Arrej[0]=new Array(3);
Arrej[1]=new Array(2);
Arrej[2]=new Array(4);

Arrej[0][0]=["Banan", 0];
Arrej[0][1]=["Apelsin", 1];
Arrej[0][2]=["Melon", 2];

Arrej[1][0]=["Gul", 3];
Arrej[1][1]=["vit", 4];

Arrej[2][0]=["Cykel", 5];
Arrej[2][1]=["Bil", 6];
Arrej[2][2]=["Buss", 7];
Arrej[2][3]=["Tunnelbana", 8];

function SkapaVal(num)
{

document.val.sedan.options.length = Arrej[num].length;

for(ctr=0;ctr<Arrej[num].length;ctr++)
{
document.val.sedan.options[ctr]=new Option(Arrej[num][ctr][0],Arrej[num][ctr][1]);
}

document.val.sedan.selectedIndex=0;
}
//--></Script>
Medlem sedan jan. 200430 inlägg
#9

Kanon, fungerar utmärkt!

Sök-formuläret finns även med på resultatsidan,
och där skulle jag vilja att det valet jag gjorde i
sedan-selectmenyn var SELECTED, dvs markerat.

I "huvud"-selectmenyn kan jag ju lägga en
if($huvud=="2") echo "SELECTED";

men hur gör jag med sedan-selectmenyn?

Du driver möjligtvis inte eget företag?

Medlem sedan sep. 20021 655 inlägg
#10

Du kan köra funktionen SkapaVal() när sidan laddas för att få upp rätt meny så här:

window.onload=function(){
    SkapaVal(<?=(isset($huvud))?$huvud:0?>);
}

Huruvida du har tänkt att sedan-menyn ska vara fylld från början eller inte vet jag inte, men det är inte så svårt att ändra.

Fast vill du även att rätt val ska komma upp i den andra menyn får vi nog göra om det hela lite, och istället skriva så här (inom <script>-taggarna):

window.onload=function(){
    var huvud = <?=(isset($huvud))?$huvud:0?>;
    var sedan = <?=(isset($sedan))?$sedan:0?>;

    document.val.sedan.options.length = Arrej[huvud].length;

    for(ctr=0;ctr<Arrej[huvud].length;ctr++)
    {
        if(Arrej[huvud][ctr][1]==sedan)
            document.val.sedan.options[ctr]=new Option(Arrej[huvud][ctr][0],Arrej[huvud][ctr][1], 1, 1);
        else
            document.val.sedan.options[ctr]=new Option(Arrej[huvud][ctr][0],Arrej[huvud][ctr][1]);
    }
}

Och nej, jag driver inte eget företag, även om jag har haft planer på att starta ett :)

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)