Autor Zpráva
blizzard
Profil
Zdravim,
Mam mensi problem s Lightboxem2. Na strance mam prazdny DIV. Jeho obsah se pres AJAX meni dle pozadavku uzivatele. Zobrazuji se v nem nahledy fotek a rizene je to pres listovani udelane v PHP. Pro upresneni lehky popis struktury:

<html>
<head>
<script>nahrani lightboxu</script>
<link type="text/css" rel="lightbox.css" />
</head>
<body>
...
<div id="obsah"></div>
...
</body>
</html>

Obsah daneho DIVu se meni pres AJAX. Ten mi vraci pouze par miniatur obrazku zhruba v tomto formatu:
<a href="http://cosi.cz/002.JPG" rel="lightbox[group]"><img src="http://cosi.cz/002.JPG" alt="" width="120" height="90" /></a>

Problemem je, ze po kliknuti na jakoukoliv miniaturu by se mel zobrazit Lightbox. Bohuzel nezobrazi. Nevim zda-li na to ma vliv pouziti AJAXu, ale po refreshnuti popr. prejiti na jinou stranku a nasledne nahrani dane stranky znovu Lightbox obvykle aktivuje a normalne se v nem fotografie zobrazuji. Po smazani cache browseru je problem identicky.

Mel by prosim nekdo nejaky napad?
ah01
Profil
V podstatě máš pravdu. Má na to vliv ten AJAX. Lightbox, který používáš, funguje tak, že po načtení stránky (událost onload) projde všechny odkazy na obrázek a přidá k nim obsluhu na zobrazení. Pokud ale přidáš na stránku odkaz až po načtení stránky, Lightbox se na něj automaticky nenaváže. Mělo by stačit po jakékoliv změně toho divu zavolat fci. initLightbox(). (případně bych lightbox upravil tak, aby neprocházel celou stránku, ale jen odkazy v tom tvém divu)
blizzard
Profil
zavolat fci. initLightbox()
Dekuji za snahu, ale ...zkusil jsem tedy na konec textu co mi posle AJAX pridat <script type="text/javascript">initLightbox();</script>. Zel to nepomohlo. Tak jsem to zkusil pred </body>, taky nic.

Jeden dotaz co se AJAXu tyce: koukal jsem takhle po netu a nekolik webu ma veci, ktere se nahravaji ajaxem primo videt ve zdroji stranky. U me ve zdrojaku te HTML stranky je jen ten prazdny DIV (i kdyz tam obsah vizualne je, tak ve zdroji je vzdy prazdno). Ma to tak vubec byt nebo jsem nekde udelal chybu?

Konkretne se obsah ajaxu zobrazuje ve zdroji zde po zalogovani.
blizzard
Profil
Ted me napadlo... Po zavolani myDiv.innerHTML = xmlHttp.responseText; by melo jit naincludovat lightbox.js a nasledne jeste ve skriptu s AJAXem zavolat fci initlightbox();. Ze by tudy vedla cesta?
ah01
Profil
zkusil jsem tedy na konec textu co mi posle AJAX pridat <script type="text/javascript">initLightbox();</script>
to mi přijde jako velmi nešťastné řešení. Nezkoušel jste tu fci. volat rovnou z AJAXovéh scriptu. Tedy něco takového:
myDiv.innerHTML = xmlHttp.responseText;

initLightbox();
blizzard
Profil
myDiv.innerHTML = xmlHttp.responseText; initLightbox();
Prave tohle reseni jsem zkousel. Jenze mi JS hlasi chybu ze ve skriptu s AJAXem nemuze najit funkci initLightbox(). Proto jsem tady blbnul s tim include. Nevim jestli JS neco takoveho umi, jako vlozit si do sebe jiny JS, ale podle me by to melo jit. Ted jsem zkousel dat do <body onload="spustmujajax(); initlightbox();", a stejne to nechodi. Zacinaji mi pomalu dochazet napady.
ah01
Profil
Nejlepší asi bude, když ukážeš tu stránku. Když člověk nevidí ten kód, tak se těžko konkrétně radí.
blizzard
Profil
ok -> [url=adresa]adresa[/url]

Podotykam ze ten AJAXovej skript je prizatim funkcni jen ve FF.
ah01
Profil
Tak už je to jasné:
1) Používáte Lightbox v2 ačkoli v úvodním dotazu odkazujete na v1. V2 žádnou fci. initLightbox() nemá.
2) Na stránce máte Prototype Framework (ten používá LightBox), takže celý váš AJAX kód se dá zapsat pomocí jednoho objektu Prototype Frameworku v podstatě na jeden řádek.

Asi takto:
function getGallery( url ){

new Ajax.Updater('fotogallery', url, {
onComplete: function(){ // část kódu LightBoxu
var anchors = $('fotogallery').getElementsByTagName('a');
// loop through all anchor tags
for (var i=0; i<anchors.length; i++){
var anchor = anchors[i];
var relAttribute = String(anchor.getAttribute('rel'));
// use the string.match() method to catch 'lightbox' references in the rel attribute
if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
anchor.onclick = function () {myLightbox.start(this); return false;}
}
}
}
});
}


Toto by mělo fungovat dle očekávání, ale nezkoušel jsem to.
blizzard
Profil
Moje chyba, omlouvam se. Jinak diky. Pracuje to presne tak jak jsem si predstavoval.

Preci jeste detail. Zda se, ze IE ma s funkci uvedenou vyse nejaky problem.
ah01
Profil
Preci jeste detail. Zda se, ze IE ma s funkci uvedenou vyse nejaky problem.
A můžete to nějak rozvést.
blizzard
Profil
A můžete to nějak rozvést.
Samozrejme. IE7 po nahrani cele stranky ma jakysi nespecifikovany problem s prevzetim dat od toho ajaxoveho skriptu. Div je prazdny i po refreshi.

IE6 pry funguje bezproblemu.
Toto téma je uzamčeno. Odpověď nelze zaslat.