Autor Zpráva
Simonik2
Profil *
Potřebuji udělat ve Fancyboxu vlastní navigaci, protože nemůžu použít funkci galerie.Chci přidat tlačítka třeba do titulku. . Hned při pokusech jsem narazil, že mi to hlásí, že funkce 'moje' není definována. Dá se to vyřešit?

<script>
$(document).ready(function(){

       function moje ()
          {
            alert('Ahoj');
          }

            $('a.fancybox').click(function() {
             $.fancybox({
                href:"/kolobezky/akce/pok5/P1060406.jpg",
                autoSize: true,
                title:  '<a href="javascript:moje();"> zpět</a>',
                closeClick : 'true'

             });
           });
     });
</script>
preca1
Profil
Zdravim,
podle mě to je tim, že funkce moje je definovaná ve funkci obsluhující načtení DOMu, ale odkaz jí volá v rámci documentu (neboli volá window.moje()). Jinými slovy, když klikneš na odkaz tak ta funkce je schovaná a proto jí nemůže zavolat. Aby ses dozvěděl víc, přečti si něco o scope, česky něco jako rozsah platnosti (teď si nevzpomenu na lepší výraz).

jQuery neovládam, ale vyřešil bych to tak, že bych dynamicky vytvořil element a a na něj bych přidal posluchač události click.
Pseudokód:
var aElement = new Element('a');
aElement. href = '';
aElement.setText(' zpět');
aElement.click(moje);
...
// kód v $.fancybox()
autoSize: true,
title: aElement, // netušim, jestli de přidat element
closeCLick: true
...

Pokud tohle nebude fungovat, tak bych tomu odkazu dal id a posluchač události na něj přidal po vytvoření fancyboxu.
Kcko
Profil
Simonik2:
Vyhod tu funkci z document ready a dej ji mimo, třeba pod to
Simonik2
Profil *
Pokročil jsem trochu dál, ale stále mi to nefunguje plně.
Já mám totiž galerii ze Zoneru ve formě FRAME, kterou vkládám do stránky pomocí iframe. (Takže je stránka,uvnitř iframe a uvnitř iframe pak FRAME)
Když zavolám pouze stránku, která je obsahem FRAME, tak galerie funguje. Když ji zavolám z hlavní stránky, tak první fotka se zobrazí ve fancyboxu. Ale pak již nejde zavolat funkce moje - hlásí chybu, že funkce moje není definována.
Přitom vlastně vnitřní funkce by měly vidět na vnější funkce. Tady je celý skript.

 <script>

var d="d";
var p="p";
var index=0;
var semafor=true;
var moje_obrazek_celkem= $("#moje_obrazek_celkem").attr("muj_attr")*1;
var moje_jpg_nazev="";

function moje (smer)
{
if (semafor) // pouze pi prvnm zobrazen fanceboxu. Pak u inkrementujeme počitadlo
{
var moje_obrazek_cislo = $("#moje_obrazek_cislo").attr("muj_attr");
index=moje_obrazek_cislo*1;
}

semafor=false;

if (smer=="d")
{
index=index+1;
if (index> moje_obrazek_celkem )
{
  index= moje_obrazek_celkem;
}

}
if (smer=="p")
{
index=index-1;
if (index < 1 )
{
index= 1;
}
}
moje_obrazek_cislo=index;
moje_obrazek_cislo=moje_obrazek_cislo+""; // převedeme na řetězec


// syntaxe ze Zoneru je, název souboru je 5-ti místný
if(moje_obrazek_cislo.length ==1)
{
  moje_obrazek_cislo="0000"+moje_obrazek_cislo;
}

if(moje_obrazek_cislo.length ==2)
{
  moje_obrazek_cislo="000"+moje_obrazek_cislo;
}
if(moje_obrazek_cislo.length ==3)
{
  moje_obrazek_cislo="00"+moje_obrazek_cislo;
}
if(moje_obrazek_cislo.length ==4)
{
  moje_obrazek_cislo="0"+moje_obrazek_cislo;
}

moje_jpg_nazev=moje_obrazek_cislo+".jpg";
moje_jpg_nazev="/akce/pok6/publish/"+moje_jpg_nazev;


var tit="";
        window.parent.window.parent.$.fancybox({
        href:moje_jpg_nazev,
        autoSize: true,
        title:'<a href="javascript:moje(p);"> Předchozí </a>' + tit+ '<a href="javascript:moje(d);"> Další </a>'
        });
} // konec funkce


$(document).ready(function(){


    $('a.fancybox').click(function() {
        // targer the parent window (same domain only)
        // then call fancybox in the parent
       semafor=true;
       window.parent.window.parent.$.fancybox({
        href:"/akce/pok6/publish/00001.jpg",
        autoSize: true,
        
        title:'<a href="javascript:moje(d);"> Pokračuj </a>'
        });
    });

      
     });
</script>
Simonik2
Profil *
Simonik2:
Tak jsem to vyřešil. Našel jsem pěkný materiál na :
http://www.yaldex.com/javascript_tutorial_3/toc.html
kde rámy a předávání proměnných jsou popsány v této kapitole :
http://www.yaldex.com/javascript_tutorial_3/LiB0049.html

Já jsem měl:
if (index> moje_obrazek_celkem )
a mělo být :
if (index> window.parent.parent.moje_obrazek_celkem )

Dobré je vypsat si pomocí window.parent.location.href , na co se vlastně odvoláváme.

Díky všem za pomoc.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: