Avatar billede dadane Novice
28. september 2000 - 15:58 Der er 3 kommentarer og
1 løsning

JavaScripts og flere forms?

Jeg har leget lidt med noget javascript bygget på Justincase\'s dropdown menu
(se http://www.elvers.dk/eksperten/dropdown/ og http://www.eksperten.dk/spm/14570)

Det virker fint! Jeg har også fået fusket så meget med det at jeg kan have dette scripts kørende flere gange (forskellige \'dobbelt\' menuer). - Men kun så længe jeg kører det i samme form.

Hvorfor?
Hvad skal jeg gøre for at køre det i 2 (eller flere) forskellige forms?

/DaDane
Avatar billede helle_fred Nybegynder
28. september 2000 - 23:23 #1
Det er fordi procedurerne i scriptet refererer til dokumentets første form, document.forms[0] - du skal skrive procedurerne om, så de tager den aktuelle form som argument.

Du skal også tage højde for, at procedurerne arbejder på select-elementerne gruppe og produkt ved at referere til navnene - de skal i stedet findes af procedurerne via den form, der overføres som argument. Som det er nu, vil det kun virke, hvis du giver dine select-elementer de samme navne.
Avatar billede dadane Novice
29. september 2000 - 08:16 #2
Jeg har naturligvis givet select elementerne nye navne. Ellers havde jeg heller ikke kunne få 2 \'dobbelt\' menuer til at virke i samme form.

Men hvordan ændre jeg på det med documents.forms[0]. Jeg har prøvet at kalde den ene [0] og den anden [1], men uden held (måske er det mig der har gjort det forkert)
Kan man gøre det ved at give de forskellige forms et navn og så referere til navnet i stedet for nummeret. Det vil gøre det noget mere fleksibelt (hvis jeg nu f.eks. pludseligt tilføjer en form mid i det hele).

/DaDane
Avatar billede helle_fred Nybegynder
29. september 2000 - 09:50 #3
Hvis du skriver funktionerne om, så de tager en form som argument, kan du få dem til at fungere generelt - så de kan kaldes fra alle forms.

For eksempel:

Funktionen populate Products skal kaldes sådan:

onChange=\"populateProducts(this.form)\"

og selve funktionen skal hedde sådan noget som:

function populateProducts(f) {
  var num = f.gruppe.options.selectedIndex;
  if (num != 0) {
    f.produkt.length = gruppe[num].length;
    f.produkt.options[0].text = \"Vælg her\";
    for (var i = 1;i < gruppe[num].length; i++) {
      f.produkt.options[i].text = gruppe[num][i].name;
    }
    f.produkt.options.selectedIndex = 0;
    f.priceEM.value = \"\";
    f.priceIM.value = \"\";
  }
}

(du erstatter simpelthen \"document.forms[0]\" med \"f\" - navnet på argumentet)

- her har jeg ikke ændret på select-elmenternes navne, og funktionen går ud fra at de forms, der kalder den alle har produkt og gruppe-selectelementer. En anden mulighed er at overføre dem som argumenter til funktionen - så du ikke er nødsaget til at anvende lige præcis disse navne til select-elementerne.

Vær opmærksom på scriptet:

  <script language=\"JavaScript\">
    document.forms[0].produkt.length = 1;
  </script>

som ligger midt i form-HTML-tagsene. Den skal formodenlig lægges ind som en sætning i funktionen.
Avatar billede dadane Novice
29. september 2000 - 14:40 #4
I hvert fald IE acceptere:

<script language=\"JavaScript\">
  this.form.<?php echo $menu2; ?>.length = 1;
</script>

Jeg har desværre ikke haft mulighed for at tjekke på NS endnu.

Men i hvert fald tak for hjælpen.
/DaDane
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