Avatar billede appel Novice
21. august 2001 - 23:57 Der er 5 kommentarer og
1 løsning

problem med markering første gang i en drop down menu

Jeg har et java script som opdatere en dropdown menu. Problemet er at førstegang dropdownmenuen bliver opdateret virker den første option ikke, men efter man har trykket på nogen af de andre virker det fint.

JavaScriptet ser således ud:

function updateVariant(kategori) {
if (document.images) {
  sel = kategori.selectedIndex;
  if (sel == 0) {
  vari = variant.a0;
  } else if (sel == 1) {
  vari = variant.a1;
  } else {
  vari = new Array();
  }
  kategori.form.variant.length = vari.length;
  for(i=0;i<vari.length;i++)
  kategori.form.variant.options[i].text = vari[i];
} else {
  alert(\"Din browser understøtter ikke javascript\"
  +\"få dig en ny browser.\");
}
}

Og det er følgende dropdown menu den fodrer:

<select name=\"kategori\" size=1 onChange=\"updateVariant(this)\">
<option>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</select>

variant.a0 og variant.a1 er to arrays som bliver hentet ind via php fra en mysql server og de bliver hentet fint og virker efter hensigten.

På forhånd tak

/ Appel
Avatar billede jakoba Nybegynder
22. august 2001 - 00:14 #1
Jeg ville nok foretrække at flytte sætningen
    kategori.form.variant.length = vari.length;
ned bagefter for-løkken.

function updateVariant(kategori) {
  if (document.images) {
    sel = kategori.selectedIndex;
    if (sel == 0) {
      vari = variant.a0;
    } else if (sel == 1) {
      vari = variant.a1;
    } else {
      vari = new Array();
    }
    for(i=0;i<vari.length;i++)
      kategori.form.variant.options[i].text = vari[i];
    kategori.form.variant.length = vari.length;
  } else {
    alert(\"Din browser understøtter ikke javascript\"
        +\"få dig en ny browser.\");
  }
};

så vi er sikre på at select-arrayet har N elementer før vi giver det længden N. Det vil nok gå godt de fleste steder, men det er noget ulogisk at sætte længden på et array med 0 elementer til N.

Hvad er det med  if (document.images) ... else \"ikke javascript\"?
Hvis brovseren ikke understøtter javascript kan den slet ikke test og vil aldrig komme til det else. (testen  document.images  fortæller om det er en tilstrækkelig avanceret browser til at den kan udskifte billeder.

mvh JakobA
Avatar billede appel Novice
22. august 2001 - 00:36 #2
hmmm, det hjælper ikke at flytte den pågældende linie, den trigger stadig ikke på første museklik på første punkt i dropdownmenuen hvilket tyder på at følgende kode af en eller anden grund ikke virker første gang:

sel = kategori.selectedIndex;
    if (sel == 0) {
      vari = variant.a0;
   
Avatar billede jakoba Nybegynder
22. august 2001 - 00:46 #3
det skulle vel ikke være sådan at du har
    <option selected>
på det punkt i dropdown menuen der ikke virker første gang?

onchange= handleren bliver kun trigget når der vælges en anden option en den der allerede er valgt.

mvh JakobA
Avatar billede appel Novice
22. august 2001 - 00:47 #4
ok, jeg har fundet ud af fejlen.
Det var ikke JavaScriptet men selvfølgelig det at når man klikker på den første option som dropdown menuen i forvejen står på aktiveres klikket ikke, men kun hvis det er en anden option end den i forvejen stod på...Naturligvis fristes man til at sige.
Nå så tror jeg at det er på tide at sige mange tak ellers og godnat.

mvh

appel
Avatar billede appel Novice
22. august 2001 - 00:48 #5
ja det var netop det og eftersom du faktisk var tidligere ude end mig får du pointene :-)
Avatar billede jakoba Nybegynder
22. august 2001 - 00:51 #6
He he. Jeg nåede det med 38 sekunder tilovers :-))
takker.
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