Autor Zpráva
Pavel9876
Profil *
Ahoj,

chtěl bych se zeptat, jakým způsobem zavolat funkci changeImage u objektu Lightbox2 (http://www.lokeshdhakar.com/projects/lightbox2/)? S OOP a konkrétně prototype v javascriptu se teprve seznamuji, ale jakým způsobem tu funkci zavolat jsem nezjistil. Potřeboval bych ji zavolat například po kliknutí na obrázek, neco jako:
<img src="..." alt=".." onclick="Lightbox.changeImage(5);" />

ale takhle to bohužel nefunguje, syntaxe bude zřejmě jiná...

níže vkládám výcuc toho, jakým způsobem je nadefinován objekt Lightbox

var Lightbox = Class.create();

Lightbox.prototype = {
    imageArray: [],
    activeImage: undefined,
    
    ...

    //
    //  changeImage()
    //  Hide most elements and preload image in preparation for resizing image container.
    //
    changeImage: function(imageNum) { 
        ...
    },

    ...
}


Předem děkuji za odpovědi a omlouvám se, jestli jsem odpověd už někde přehlédl...

Pavel
Witiko
Profil
Takto bys volal funkce statické. Musíš si nejprve vytvořit novou instanci od konstruktoru Lightbox. Tzn.:
var instance = new Lightbox( argumenty );
    instance.changeImage( argumenty );
Pavel9876
Profil *
Děkuji, tohle mi pomohlo, po delším zkoumání jsem totiž zjistil v čem mi to nesedělo... ve scriptu lightbox.js je na poslední řádce tento zápis:
document.observe('dom:loaded', function () { new Lightbox(); });

nevim jak to popsat, ale objekt není přiřazen žádné instanci, takže s funkcema objektu nelze pracovat přes instanci (či jak to správně nazvat) Lightbox, ale musí se to přepsat na:
document.observe('dom:loaded', function () { LB = new Lightbox(); });

a přes instanci LB to pak pracuje tak jak jsem očekával...

Pavel
Witiko
Profil
Pavel9876:
Ano, první kód nedává smysl, jelikož je instance ihned po vytvoření zahozena. Jedině snad, kdyby konstruktor dělal něco navrch, což ale nedává moc smysl. Pro klid duše je ještě dobrým nápadem dát někam před uvedený kód deklaraci var LB;, abychom pracovali s globální proměnnou a ne prostým atributem objektu window.

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:

0