Avatar billede tommyls Nybegynder
23. september 2002 - 12:06 Der er 11 kommentarer og
1 løsning

parametre

Jeg har en funktion som skal kaldes således:
onMouseOut="setTimeout('snap()',500)"

Hvordan er syntaksen hvis jeg skal have disse parametre med:
this, this.parentNode.parentNode, 'xSub0', 'bottom', true, this.parentNode.offsetLeft, 1

T
Avatar billede nikolajdu Nybegynder
23. september 2002 - 12:08 #1
Det kommer såmænd an på hvordan din funktion er opbygget??
Avatar billede tommyls Nybegynder
23. september 2002 - 12:11 #2
Den skal bare have parametrene med! Hvis der ikke er timeout med ser den sådan her ud:
onMouseOver="snap ( this, this.parentNode.parentNode, 'xSub0', 'bottom', true, this.parentNode.offsetLeft, 1 )"
Avatar billede nikolajdu Nybegynder
23. september 2002 - 12:16 #3
Lav hellere en ny funktion :)

function du(a,b,c,d,e,f,g){
setTimeout("snap(a, b, c, d, e, f, g)",500)
}
onMouseOut="du( this, this.parentNode.parentNode, 'xSub0', 'bottom', true, this.parentNode.offsetLeft, 1 )"
Avatar billede jakoba Nybegynder
23. september 2002 - 12:31 #4
de eneste paramere di kan give til en funktion i et settimeoutkald er parametre der pålideligt kan konverteres til en streng og tilbage igen. det vil sige strenge, booleans tal og null.

for at sende en objektreference som parameter må du gemmen den i en global variabel med et unikt navn som funktionen så kan få og finde objektreferencen ud af:

så vi kommer til at lave flere linier plus lidt globalt memory:

i head:

var teller = 0;

function kaldesOnMouseOut( refParam, strParam, strParam2,
                          boolParam, refparam, numParam2 ) {
    var tal = ++teller;
    var navn = "global"+tal;
    window[ navn ] = new Object();
    window[ navn ].refParam = refParam;
    window[ navn ].refParam2 = refParam2;
    setTimeout( "snap( '" +navn +"', '"
                      +strParam +"', '"
                      +strParam2 +"', "
                      +boolParam +", "
                      +numParam +");"
                    , 500 );
  // nu er det kald sat i kø.
}

// forrest i funktionen snap skal de parameter så pakkes ud igen:
function snap( navn, strParam, strParam2,
              boolParam, numParam2 ) {
    var refParam  = window[navn].refParam;
    var refParam2 = window[navn].refParam2;
    delete window[navn];  // frigiv den ram de brugte
    // nu har funktionen snap fået fat i alle parametrene.
...  og så det du ellers har i funktionen snap.

mvh JakobA
Avatar billede nikolajdu Nybegynder
23. september 2002 - 12:33 #5
Nåja glemte sgu da lige at mine a,b,c,d,e,f,g skulle lægges ind som variabler... doh.
Avatar billede jakoba Nybegynder
23. september 2002 - 12:33 #6
Ups.  jeg kom til at skrive '2' efter numParam, hvor det skulle stå efter nr 2 refParam
function kaldesOnMouseOut( refParam, strParam, strParam2,
                          boolParam, refParam2, numParam ) {
Avatar billede tommyls Nybegynder
23. september 2002 - 12:38 #7
betyder det at jeg skal ændre selve js. når jeg skal sætte dette ind.
function snap( navn, strParam, strParam2,
              boolParam, numParam2 ) {
    var refParam  = window[navn].refParam;
    var refParam2 = window[navn].refParam2;
    delete window[navn];

Jeg vil helst ikke ændre selve scriptet!

T
Avatar billede jakoba Nybegynder
23. september 2002 - 12:58 #8
enten det, eller også kan du lave dit settimeout kald lidt mere kompliceret:

    setTimeout( "snap( window['" +navn +"'].refParam, '"
                      +strParam +"', '"
                      +strParam2 +"', "
                      +boolParam +", "
                      +"window['" +navn +"'].refParam2, '"
                      +numParam +");"
                    , 500 );

så skal der slet ikke ændres i din funktion snap. men til gengæld vil der akkumulere en masse gamle objekter i window fordi vi aldrig frigiver de window[navn] objekter vi laver.
Det er en memory leak som gradvist æder din ram. OK hvis funktionen 'kaldesOnMouseOut' kun bliver kaldt et par tusind gange, men det kan crashe browseren hvis den kaldes for mange gange.

mvh JakobA
Avatar billede tommyls Nybegynder
23. september 2002 - 13:08 #9
mangler jeg ikke et objekt i:

function CheckMovement( refParam, strParam, strParam2, boolParam, refParam2, numParam  ) {

Der mangler da et parameter!

Så skulle den vist være der?

Hvis du gider at lave en lille forklaring på hvorfor du bruger window[navn] etc. smider jeg lige 100 point oveni!

T
Avatar billede jakoba Nybegynder
23. september 2002 - 13:31 #10
er det denne funktions definition du mener:
function snap( navn, strParam, strParam2,
              boolParam, numParam2 ) {
begge parametrene refParam og refParam2 bliver fundet igennem navn, så der er fjernet 2 parametre og erstattet med en.

når du skriver et script i <head sektionen bliver de variable og funktioner de definerer lagt i rammens window objekt:

<script type='text/javascript'>

var tal = 25
var streng = "diesellokomotiv";

function lokoNummer() {
    var lokaltTal = tal;
    gadVidsthvor = 123456;
    alert( streng +" #" +lokaltTal );
    window['global'+14] = 1234567890;
}
// de kan adresseres på mange måder:
alert(  tal +"\n" +window.tal +"\n" +window['tal'] );
lokoNummer();
alert(  global14 +"\n" +window.global14 +"\n" +window['global'+14] );
alert( gadVidsthvor ); // 'undefined' i NS, '123456' i IE :(
alert( lokaltTal );  // 'undefined' i både NS og IE

</script>

variablen  lokaltTal  ligger ikke i window objektet, den ligger i funktionens objekt. ved at skrive var foran sikrer vi at den bliver oprettet i 'dette' objekt
linien
    gadVidsthvor = 123456;
opretter også en variabel, men der forskellige browsere er lidt ueninge om hvilket objekt den variabel skal placeres i. EcmaScript og Javascript placerer den i funktionens objekt, IE placerer den i vinduets objekt. Det er en af de små forskelle man nemt kan slå sig selv i hovedet med når man programmerer.
Når jeg skriver
    window['global'+14] = ny værdi
er det for at være SIKKER på at variablen global14 bliver oprettet i vindues objektet.

mvh JakobA
Avatar billede tommyls Nybegynder
23. september 2002 - 13:35 #11
hup! Hvordan kan jeg lige overføre nogle flere point til dig!

Glemte det lige!

T
Avatar billede jakoba Nybegynder
23. september 2002 - 13:49 #12
det er ok. jag har :)
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