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ää?
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.
Hei wau,
Nythän se toimiikin hienosti. Olipas pienestä kiinni.
Kiitoksia paljon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.