Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Javascript: probleema muuttujan sijoituksessa funktioon

askomyyrä [07.05.2009 23:07:53]

#

Moi,

Mulla on pieni ongelma ollut pidemmänkin aikaa callback -funktion kanssa, käyttäessäni javascriptin jquery -kirjastoa.

Eli, mulla on popup -ikkuna, joka feidautuu fadeout() -funktiolla, joten siksi käytän callbackkia. Sinne popup ikkunan sisälle työnnän vaihtelevasti kamaa php:stä/html:stä muutaman eri linkin kautta:

onclick="klikkailu(\'',$sisalto,'\');"

..ja myös html:ssä on tuo popupin sisalto divinä, eli tätä diviä käytetään popuppina ja sen sisältö vaihtuu aina eri linkin mukaisesti ($sisalto -muuttuja):

echo '<div id="popup">';
echo ' <div id="popupSisalto"> </div>';
echo '</div>';

Tässä on sitten osa tuosta javascriptin pätkästä:

popup = $("#popup");
popupSisalto = $("#popup #popupSisalto");


function suljePopup(callBack)
{
  popup.fadeOut(400, callBack);
  popupAuki = false;
}

function klikkailu(str)
{
  suljePopup(function(str)
  {
    popupSisalto.html(str);
    avaaPopup();
  });
}

Tämä toimii nyt muuten ihan hienosti, mutta toi str -muuttuja näyttäis pysyvän kuitenkin tyhjänä scriptissä.. joten sijoitanko mä nyt jotenkin aivan väärin tuota $sisalto -muuttujaa tohon javascriptin -funktioon, vai missähän mättää?

map_ [08.05.2009 19:57:25]

#

Kun kirjoitat

suljePopup(function(str)
{
  popupSisalto.html(str);
  avaaPopup();
});

annat suljePopupille parametriksi funktion, joka odottaa yhtä parametria nimeltä str. Funktion sisällä rivi

  popupSisalto.html(str);

käyttää tätä callbackin str-parametria, ei siis klikkailu-funktion str-parametria.

fadeOut ei ilmeisesti anna callbackilleen mitään parametria, joten tuo sisempi str on tyhjä.

Ratkaisu on tehdä callbackistä parametriton

suljePopup(function()
{
  popupSisalto.html(str);
  avaaPopup();
});

jolloin str viittaakin klikkailu-funktiolle annettuun parametriin.

Lisätietoa aiheesta löytänee hakusanoilla javascript ja sulkeuma tai closure.

askomyyrä [11.05.2009 15:54:03]

#

Hei wau,

Nythän se toimiikin hienosti. Olipas pienestä kiinni.

Kiitoksia paljon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta