Avatar billede bbe1379 Nybegynder
18. juni 2000 - 22:38 Der er 12 kommentarer og
1 løsning

problem med function

Hvorfor virker dette ikke:

function SelectThese(num1,num2,num3){
    var num1
    var num2
    var num3
    setTimeout('document.form1.selectName1.options[num1].selected = true;',100);
    setTimeout('reshow(1)',200);
    setTimeout('document.form1.selectName2.options[num2].selected = true;',300);
    setTimeout('reshow(2)',400);
    setTimeout('document.form1.selectName3.options[num3].selected = true;',500);
    setTimeout('reshow(2)',600)
}

selve syntaksen er vist god nok, for det hele virker hvis jeg skriver et tal i stedet for num1, num2 eller num3 - det er altså variablen den er galt med.

Jeg kalder funktionen med f.eks. :

SelectThese(1,2,3)

Avatar billede Lasse Novice
18. juni 2000 - 22:44 #1
Jeg ved ikke om det er det, men erklærer du ikke variablerne igen når du kommer ind i funktionen. Det jeg refererer til er:
    var num1
    var num2
    var num3

Slet det, og det skulle virke :-)
Avatar billede Lasse Novice
18. juni 2000 - 22:55 #2
nope, det virker ikke, jeg kigger lige på det:
Avatar billede erikjacobsen Ekspert
18. juni 2000 - 23:01 #3
Selvfølgelig skal du ikke erklære num1,num2 og num3. Væk med dem, det har du selvfølgelig
ret i, gooky. Desuden er der formentlig en lille bommert i sidste linie, hvor
  setTimeout('reshow(2)',600)
nok skal være
  setTimeout('reshow(3)',600)

Hvis ikke det virker, så giv os lige så meget kode, så vi kan afprøve det selv.

Avatar billede bbe1379 Nybegynder
18. juni 2000 - 23:14 #4
erikjacobsen > der er ikke så meget kode, der gør en forskel.

...bare brug alert i stedet for reshow

function tester(num1,num2,num3){
    setTimeout('document.form1.selectName1.options[num1].selected = true;',100);
    setTimeout('alert(1);',200);
    setTimeout('document.form1.selectName2.options[num2].selected = true;',300);
    setTimeout('alert(2);',400);
    setTimeout('document.form1.selectName3.options[num3].selected = true;',500);
    setTimeout('alert(3);',600)
}
Avatar billede Lasse Novice
18. juni 2000 - 23:15 #5
ja, jeg kan sku ikke finde ud af hvorfor den ikke kender num1. Til andre personer der vil finde fejlen, fejlen ligger i linien:
setTimeout('document.form1.selectName1.options[num1].selected = true;',100);

Af en eller anden grund kender den bare ikke num1. Jeg glæder mig til en der kommer med et svar :-)
Avatar billede erikjacobsen Ekspert
19. juni 2000 - 07:09 #6
Ja, det er så noget af koden ;-) For at afprøve den skal jeg stadig finde på en form, eller noget
andet. Så det har jeg ikke, men kigger på den med friske øjne, og vil bede dig prøve:

eval("setTimeout('document.form1.selectName1.options[num1].selected = true;',100);");

og tilsvarende i de 2 andre med num2 og num3.
Avatar billede erikjacobsen Ekspert
19. juni 2000 - 07:10 #7
Eller, det er vel dette der er det korrekte (men prøv lige begge):
  setTimeout(eval('document.form1.selectName1.options[num1].selected = true;'),100);
Avatar billede el_gnu Nybegynder
19. juni 2000 - 09:14 #8
Problemet er at du skriver variablerne num1,num2,num3 i en String. Når disse udtryk bliver kaldt prøver den at finde globale variable med navnene num1 etc.
Dette kan løses således:

function tester(num1,num2,num3){
    setTimeout('document.form1.selectName1.options[' + num1 + '].selected = true;',100);
    setTimeout('alert(1);',200);
    setTimeout('document.form1.selectName2.options[' + num2 + '].selected = true;',300);
    setTimeout('alert(2);',400);
    setTimeout('document.form1.selectName3.options[' + num3 + '].selected = true;',500);
    setTimeout('alert(3);',600)
}
Avatar billede bbe1379 Nybegynder
19. juni 2000 - 09:54 #9
el_gnu >takker ......
Avatar billede erikjacobsen Ekspert
19. juni 2000 - 10:10 #10
Just for the record, så virker min løsning altså - mest for dem, som måtte komme
forbi dette spørgsmål en anden gang. Hvad der er bedst at gøre skal jeg ikke kunne sige.
Har man et kompliceret udtryk med mange variabler fra JavaScript vil jeg nok anbefale eval-
funktionen, i stedet for at holde styr på '-er og +'er. Dette lille testeksempel illustrerer det:

<html>
<head>
<title>Lille test</title>
<script language="JavaScript">
function tester(num1) {
eval('document.bbb.text1.value = num1;');
}
</script>
</head>
<body bgcolor="#FFFFFF">
<form method=post action="" name="bbb">
<input type="text" name="text1" >
<input type="button" onclick="tester(7)">
</form>
</body>
</html>
Avatar billede bbe1379 Nybegynder
19. juni 2000 - 10:22 #11
erikjacobsen >..ja, den virker garanteret,......men jeg er lidt af en newbie i javascript, så jeg vælger altid de løsninger, jeg "kan forstå"......og ['+ num1 +'] er mere inden for min række vidde end en komando jeg ikke kender.

Hvad betyder/gør eval egentlig???
Avatar billede el_gnu Nybegynder
19. juni 2000 - 10:38 #12
eval() tolker en string som en JavaScript statement f.eks.

var streng = '2*5+10';
windoew.alert(eval(streng));

giver en alert hvor der står 20

function etEllerAndet() {
    //noget kode
}

var streng = 'etEllerAndet()';
eval(streng);

kalder funktionen etEllerAndet()

Jeg håber det var til at forstå :-))

(-: el Gnu
Avatar billede erikjacobsen Ekspert
19. juni 2000 - 11:37 #13
Det er helt i orden, bbe, bare vi allesammen lærer lidt undervejs....
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