Avatar billede Slettet bruger
07. september 2007 - 17:07 Der er 11 kommentarer og
1 løsning

Dynamisk dropdown

Hej
Jeg sidder og pusler med en dobbelt dropdown. dvs den skal først vise den ene og derefter vise/lave den anden select.

Herefter skal den gå til den side man vælger:

men jeg kan ikke få det til at virke.

der vises kun TRE ( ? ) tomme dropdowns HJÆLP


<SELECT NAME="Menu1" onChange="changeListOfPages(this.form)">
<SCRIPT LANGUAGE="JavaScript">
with (document) {
tot = Menu1Options.length;
        for (i = 0; i < tot; i++)
        writeln("<OPTION>" +Menu1Options[i]);
}

</script>
</SELECT>


<SELECT NAME="Menu2" onChange="gotoPage(this.form)">

<script>
with (document) {
//writeln('<OPTION>""</option>');
        for (i = 0; i < maxLength; i++)
        writeln("<OPTION>" +Menu2Options[i]);
        writeln("</SELECT>");
    for (i = maxLength; i > Menu2OriginalLength; i--)
        { DoubleDropDownMenu.Menu2.options[i] = null; }
changeListOfPages();
}

</SCRIPT>



<SCRIPT LANGUAGE="JavaScript">

function changeListOfPages();

var maxLength = 25;
Menu2Options= new Array;
var Menu2OriginalLength = Menu2Options.length;


Menu1Options= new Array;

Menu1Options[0] = "Select a Region";
Menu1Options[1] = "Europe";
Menu1Options[2] = "Asia";
Menu1Options[3] = "Latin America";
Menu1Options[4] = "Middle East";
Menu1Options[5] = "Africa";



function changeListOfPages()

{
Menu2Options.length = 0;
Menu1SelectedItem = document.DoubleDropDownMenu.Menu1.selectedIndex;
if (Menu1SelectedItem == null) return;

if (Menu1SelectedItem == 0)
/*Personal Development*/
{
Menu2Options[0] = "";


if (Menu1SelectedItem == 1)
/*Europe . Menu*/
{
Menu2Options= new Array;
Menu2Options[0] = new Option("Select a country");
Menu2Options[1] = new Option(" Bosnia and Herzegovina ");
Menu2Options[2] = new Option(" Bulgaria ");
Menu2Options[3] = new Option(" Croatia ");
Menu2Options[4] = new Option(" Hungary ");
Menu2Options[5] = new Option(" Macedonia ");
Menu2Options[6] = new Option(" Romania ");
Menu2Options[7] = new Option(" Russia ");
Menu2Options[8] = new Option(" Ukraine ");


/*Europe-Pages*/
Pages = new Array;
Pages[0] = "";
Pages[1] = "../pages/BetalingsprofilBosniaHerzegovina.aspx ";
Pages[2] = "../pages/Betalingsprofilbulgaria.aspx ";
Pages[3] = "../pages/BetalingsprofilCroatia.aspx";
Pages[4] = "../pages/BetalingsprofilHungary.aspx";
Pages[5] = "../pages/BetalingsprofilMacedonia.aspx";
Pages[6] = "../pages/BetalingsprofilRomania.aspx";
Pages[7] = "../pages/BetalingsprofilRussia.aspx";
Pages[8] = "../pages/BetalingsprofilUkraine.aspx";




}
if (Menu1SelectedItem == 2)
/*Asia - Menu*/
{
Menu2Options= new Array;
Menu2Options[0] = new Option("Select a Country");
Menu2Options[1] = new Option(" China ");
Menu2Options[2] = new Option(" India ");
Menu2Options[3] = new Option(" Indonesia ");
Menu2Options[4] = new Option(" Japan ");
Menu2Options[5] = new Option(" Kazakhstan ");
Menu2Options[6] = new Option(" Malaysia ");
Menu2Options[7] = new Option(" Pakistan ");
Menu2Options[8] = new Option(" Philippines ");
Menu2Options[9] = new Option(" South Korea ");
Menu2Options[10] = new Option(" Taiwan ");
Menu2Options[11] = new Option(" Thailand ");
Menu2Options[12] = new Option(" Vietnam ");


/*Asia - pages*/
Pages = new Array;
Pages[0] = "";
Pages[1] = "../pages/BetalingsprofilChina.aspx ";
Pages[2] = "../pages/BetalingsprofilIndia.aspx ";
Pages[3] = "../pages/BetalingsprofilIndonesia.aspx";
Pages[4] = "../pages/BetalingsprofilJapan.aspx";
Pages[5] = "../pages/BetalingsprofilKazakhstan.aspx";
Pages[6] = "../pages/BetalingsprofilMalaysia.aspx";
Pages[7] = "../pages/BetalingsprofilPakistan.aspx";
Pages[8] = "../pages/BetalingsprofilPhilippines.aspx";
Pages[9] = "../pages/BetalingsprofilSouthKorea.aspx";
Pages[10] = "../pages/BetalingsprofilTaiwan.aspx";
Pages[11] = "../pages/BetalingsprofilThailand.aspx";
Pages[12] = "../pages/BetalingsprofilVietnam.aspx";
}

if (Menu1SelectedItem ==3)
/*Latin America - Menu*/
{
Menu2Options= new Array;
Menu2Options[0] = new Option("Select a Country");
Menu2Options[1] = new Option(" Argentina ");
Menu2Options[2] = new Option(" Brazil ");
Menu2Options[3] = new Option(" Chile ");
Menu2Options[4] = new Option(" Mexico ");
Menu2Options[5] = new Option(" Peru ");



/*Latin America - pages*/
Pages = new Array;
Pages[0] = "";
Pages[1] = "../pages/BetalingsprofilArgentina.aspx ";
Pages[2] = "../pages/BetalingsprofilBrazil.aspx ";
Pages[3] = "../pages/BetalingsprofilIndonesia.aspx";
Pages[4] = "../pages/BetalingsprofilChile.aspx";
Pages[5] = "../pages/BetalingsprofilMexico.aspx";
Pages[6] = "../pages/BetalingsprofilPeru.aspx";
}

if (Menu1SelectedItem ==4)
/*Middle East - Menu*/
{
Menu2Options= new Array;
Menu2Options[0] = new Option("Select a Country");
Menu2Options[1] = new Option(" Iran ");
Menu2Options[2] = new Option(" Israel ");
Menu2Options[3] = new Option(" Jordan ");
Menu2Options[4] = new Option(" Kuwait ");
Menu2Options[5] = new Option(" Lebanon ");
Menu2Options[6] = new Option("Saudi Arabia");
Menu2Options[7] = new Option(" Syria ");
Menu2Options[8] = new Option(" Turkey ");
Menu2Options[9] = new Option(" UAE ");
Menu2Options[10] = new Option(" Yemen ");


/*Middle East - pages*/
Pages = new Array;
Pages[0] = "";
Pages[1] = "../pages/BetalingsprofilIran.aspx ";
Pages[2] = "../pages/BetalingsprofilIsrael.aspx ";
Pages[3] = "../pages/BetalingsprofilJordan.aspx";
Pages[4] = "../pages/BetalingsprofilKuwait.aspx";
Pages[5] = "../pages/BetalingsprofilLebanon.aspx";
Pages[6] = "../pages/BetalingsprofilSaudiArabia.aspx";
Pages[7] = "../pages/BetalingsprofilSyria.aspx";
Pages[8] = "../pages/BetalingsprofilTurkey.aspx";
Pages[9] = "../pages/BetalingsprofilUAE.aspx";
Pages[10] = "../pages/BetalingsprofilYemen.aspx";
}

if (Menu1SelectedItem ==5)
/*Middle East - Menu*/
{
Menu2Options= new Array;
Menu2Options[0] = new Option("Select a Country");
Menu2Options[1] = new Option(" Algeria ");
Menu2Options[2] = new Option(" Egypt ");
Menu2Options[3] = new Option(" South Africa ");



/*Middle East - pages*/
Pages = new Array;
Pages[0] = "";
Pages[1] = "../pages/BetalingsprofilAlgeria.aspx ";
Pages[2] = "../pages/BetalingsprofilEgypt.aspx ";
Pages[3] = "../pages/BetalingsprofilSouthAfrica.aspx";
}






tot = Menu2Options.length;
for (i = Menu2OriginalLength; i > 0; i--)
{ document.DoubleDropDownMenu.Menu2.options[i] = null; }
{ document.DoubleDropDownMenu.Menu2.options[i] = Menu2Options[i]; }
document.DoubleDropDownMenu.Menu2.options[0].selected = true;
Menu2OriginalLength = Menu2Options.length;
/* This makes the value of Menu2OriginalLength correct, if the subjects have been changed. */
}

function gotoPage()
{

i = document.DoubleDropDownMenu.Menu2.selectedIndex;
window.location.href = Pages[i];
}
</script>
Avatar billede jhe-ting Nybegynder
09. september 2007 - 01:29 #1
Det ligner ikke nogen standard jeg har set før. Hvis det stammer fra en HTML fil forstår jeg godt du har problemer. Der er så mange misforståelser og syntaksfejl, at du nok bør studere lidt mere HTML og DOM-orienteret javascript. (DHTML.)
Jeg tror nu alligevel godt jeg kan regne ud hvad du gerne vil opnå, når jeg læser dit oplæg, men en total omskrivning til gyldig syntaks er lidt meget forlangt for 60 p. (Læg mærke til den manglende respons på dit sp.)
Avatar billede Slettet bruger
09. september 2007 - 09:18 #2
ja jeg kan godt se at det er noget rod. Men jeg er helt newbie til jacascript. ja endda til programmering. Men jeg vil da gerne smide nogle flere point.

Det den skal gøre er følgende:

når man kommer ind på siden skal dropdown 1 vises. når man så vælger noget i dropdown 1 så skal dropdown 2 vises med de option som tlhører det man valgte i dropdown 1.
når man så vælger noget i dropdown 2 så skal den gå til urlen (onchange ?)
Kan du ikke bare komme med et simpelt eksempel. TIA
Avatar billede psykochicken Nybegynder
09. september 2007 - 13:20 #3
Måske kan du hente inspiration her:
http://roenving.users.whitehat.dk/
>>multiple selects

...og så noget ala onchange="window.location.href=this.value" på den sidste select.

/psykochicken
Avatar billede neoman Novice
09. september 2007 - 13:31 #4
Der er nogle links til .ASPX sider - kører du alt dette her i .NET ? I så fald kan den funktionalitet fås noget nemmere fra AJAX.NET:

http://www.asp.net/AJAX/Control-Toolkit/Live/CascadingDropDown/CascadingDropDown.aspx
Avatar billede Slettet bruger
09. september 2007 - 14:30 #5
nej det er noget som kører i et sharepoint miljø som reuseable content - så jeg kan ikke bruge aspx. det skal køre i javascript og clientside.
Avatar billede Slettet bruger
09. september 2007 - 14:32 #6
psykochicken - jeg ser lige på koden på det link
Avatar billede Slettet bruger
09. september 2007 - 15:00 #7
jeg har fundet dette script og det virker overskueligt. Men hvordan får jeg det til først at vise dropdown 2 når man har valgt noget i dropdown 1. er det noget med display none eller ....

<script language="JavaScript" type="text/javascript">
<!--

/*
*** Multiple dynamic combo boxes
*** by Mirko Elviro, 9 Mar 2005
*** Script featured and available on JavaScript Kit (http://www.javascriptkit.com)
***
***Please do not remove this comment
*/

// This script supports an unlimited number of linked combo boxed
// Their id must be "combo_0", "combo_1", "combo_2" etc.
// Here you have to put the data that will fill the combo boxes
// ie. data_2_1 will be the first option in the second combo box
// when the first combo box has the second option selected


// first combo box

    data_1 = new Option("kategori 1", "$");
    data_2 = new Option("kategori 2", "$$");
    data_3 = new Option("kategori 3", "$$$");

// second combo box

    data_1_1 = new Option("link 1", "-");
    data_1_2 = new Option("link 2", "-");
    data_2_1 = new Option("21", "--");
    data_2_2 = new Option("22", "--");
    data_2_3 = new Option("23", "--");
    data_2_4 = new Option("24", "--");
    data_2_5 = new Option("25", "--");
   
    data_3_1 = new Option("27", "--");



// other parameters

    displaywhenempty=""
    valuewhenempty=-1

    displaywhennotempty="-select-"
    valuewhennotempty=0


function change(currentbox) {
    numb = currentbox.id.split("_");
    currentbox = numb[1];

    i=parseInt(currentbox)+1

// I empty all combo boxes following the current one

    while ((eval("typeof(document.getElementById(\"combo_"+i+"\"))!='undefined'")) &&
          (document.getElementById("combo_"+i)!=null)) {
        son = document.getElementById("combo_"+i);
        // I empty all options except the first one (it isn't allowed)
        for (m=son.options.length-1;m>0;m--) son.options[m]=null;
        // I reset the first option
        son.options[0]=new Option(displaywhenempty,valuewhenempty)
        i=i+1
    }


// now I create the string with the "base" name ("stringa"), ie. "data_1_0"
// to which I'll add _0,_1,_2,_3 etc to obtain the name of the combo box to fill

    stringa='data'
    i=0
    while ((eval("typeof(document.getElementById(\"combo_"+i+"\"))!='undefined'")) &&
          (document.getElementById("combo_"+i)!=null)) {
          eval("stringa=stringa+'_'+document.getElementById(\"combo_"+i+"\").selectedIndex")
          if (i==currentbox) break;
          i=i+1
    }


// filling the "son" combo (if exists)

    following=parseInt(currentbox)+1

    if ((eval("typeof(document.getElementById(\"combo_"+following+"\"))!='undefined'")) &&
      (document.getElementById("combo_"+following)!=null)) {
      son = document.getElementById("combo_"+following);
      stringa=stringa+"_"
      i=0
      while ((eval("typeof("+stringa+i+")!='undefined'")) || (i==0)) {

      // if there are no options, I empty the first option of the "son" combo
      // otherwise I put "-select-" in it

            if ((i==0) && eval("typeof("+stringa+"0)=='undefined'"))
                if (eval("typeof("+stringa+"1)=='undefined'"))
                  eval("son.options[0]=new Option(displaywhenempty,valuewhenempty)")
                else
                eval("son.options[0]=new Option(displaywhennotempty,valuewhennotempty)")
          else
              eval("son.options["+i+"]=new Option("+stringa+i+".text,"+stringa+i+".value)")
          i=i+1
      }
      //son.focus()
      i=1
      combostatus=''
      cstatus=stringa.split("_")
      while (cstatus[i]!=null) {
          combostatus=combostatus+cstatus[i]
          i=i+1
          }
      return combostatus;
    }
}

//-->
</script>

<form>
<select name="combo0" id="combo_0" onChange="change(this);" style="width:200px;">
    <option value="value1">-select-</option>
    <option value="value2">1</option>
    <option value="value3">2</option>
    <option value="value4">3</option>
</select>


<select name="combo1" id="combo_1" onchange="window.location.href=this.value" style="width:200px;">
    <option value="value1">  </option>
   
</select>



</form>

<p align="center"><font face="arial" size="-2">This free script provided by</font><br>
<font face="arial, helvetica" size="-2"><a href="http://javascriptkit.com">JavaScript
Kit</a></font></p>
Avatar billede Slettet bruger
09. september 2007 - 15:05 #8
i koden ovenover står der data_1 = new Option("kategori 1", "$");
    data_2 = new Option("kategori 2", "$$");//----------------------- HVAD GØR DE ------------
    data_3 = new Option("kategori 3", "$$$");//----------------------- HVAD GØR DE ------------

// second combo box

    data_1_1 = new Option("link 1", "-");
    data_1_2 = new Option("link 2", "-");
    data_2_1 = new Option("21", "--");
    data_2_2 = new Option("22", "--");
    data_2_3 = new Option("23", "--");
    data_2_4 = new Option("24", "--");
    data_2_5 = new Option("25", "--");
   
    data_3_1 = new Option("27", "--");
Avatar billede psykochicken Nybegynder
10. september 2007 - 12:59 #9
Skjul 2.dropdown ved start:
<select name="combo1" id="combo_1" onchange="window.location.href=this.value" style="width:200px;display:none">

Vis ved valg i 1.dropdown:
tilføj: son.style.display="inline";
under // filling the "son" combo (if exists)
...hvor "son" er defineret.

/psykochicken
Avatar billede Slettet bruger
11. september 2007 - 21:03 #10
psykochicken : Fint det virker smider - du lige et svar og tak for hjælpen
Avatar billede psykochicken Nybegynder
12. september 2007 - 16:30 #11
Velbekomme, men behold bare pointene selv - er ikke den store pointhaj ;o)
Avatar billede Slettet bruger
16. september 2007 - 10:48 #12
ok lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester