<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  >

<channel>
  <title>coldheat.deAJAX &#8211; coldheat.de</title>
  <atom:link href="https://www.coldheat.de/tag/ajax/feed" rel="self" type="application/rss+xml" />
  <link>https://www.coldheat.de</link>
  <description>Oxymoron#1</description>
  <lastBuildDate>Thu, 23 Apr 2026 10:29:59 +0000</lastBuildDate>
  <language>de</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
  
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://www.coldheat.de/tag/ajax/feed"/>
  <item>
    <title>Lightbox-Skript bei AJAX-Inhalten</title>
    <link>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten</link>
    <comments>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten#comments</comments>
    <pubDate>Tue, 07 Nov 2006 14:25:56 +0000</pubDate>
    <dc:creator><![CDATA[Chris_]]></dc:creator>
    		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Tutorial]]></category>

    <guid isPermaLink="false">http://www.coldheat.de/archiv/2006/11/lightbox-skript-bei-ajax-inhalten.php</guid>
    <description><![CDATA[Ich bin immer noch am Rumwerkeln meines Online-Portfolios, nun allerdings nähert sich das Ganze zumindestens funktional der Fertigstellung oder einfach formuliert: es funzt alles. Was hat diese Geschichte nun so kompliziert gemacht?
Das Portfolio ist ein separater Blog in der &#8230;]]></description>
        <content:encoded>
    <![CDATA[<div>


    <p>Ich bin immer noch am Rumwerkeln meines Online-Portfolios, nun allerdings nähert sich das Ganze zumindestens funktional der Fertigstellung oder einfach formuliert: es funzt alles. Was hat diese Geschichte nun so kompliziert gemacht?</p>
<p>Das Portfolio ist ein separater Blog in der gleichen Movable-Type Installation wie auch der Hauptblog hier oder der <a href="https://www.coldheat.de/linkblog/" title="Quicklinks">Linkblog</a>. Mein Wunsch war es, so möglichst einfach das Portfolio verwalten zu können, ohne groß manuell neue Links setzen zu müssen, so wie bei der jetzigen Galerie.</p>
<p>Schreibe ich nun einen neuen Eintrag in den Portfolio-Blog, dann werden auch die Archive dieses separaten Blogs aktualisiert. Diese Archive hole ich mir dann mit Hilfe von AJAX in den Hauptblog hier. Dank Movable-Type kann ich das Portfolio sogar sehr einfach nach Kategorien verwalten und mit genau diesen Kategorie-Archiven arbeitet die Hauptseite.</p>
<p>Klickt der Besucher dann zum Beispiel den Link <em>Non-Print</em>, dann holt sich die Seite das Kategorie-Archiv <em>Non-Print</em> vom Portfolio-Blog und lädt es in die aktuelle Seite des Browsers. Soweit nicht allzu kompliziert. Probleme kamen, als ich das <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a>-Skript zum Vergrößern der Portfolio-Bilder nutzen wollten.</p>
<p><a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> initialisiert sich beim Laden der Seite im Browser und kann dann genau mit den Inhalten arbeiten, die zu dieser Zeit vorhanden sind. Wenn ich nun mit AJAX die Kategorie-Archive in die Seite lade, dann ändern sich die Inhalte, aber <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> bekommt davon nichts mit und kann somit nicht damit arbeiten. Ein paar Google-Suchen später, brachten <a href="http://www.dynamicdrive.com/forums/archive/index.php/t-11098.html" title="dynamicdrive.com/forums">zwei</a> <a href="http://www.dynamicdrive.com/forums/showthread.php?t=13003" title="dynamicdrive.com/forums">Links</a> Licht ins Dunkel, denn so gut sind meine Javaskript-Kenntnisse dann auch nicht, um so ein Ding zu lösen.</p>
<p><span id="more-253"></span>
Folgende Funktion wird zusätzlich in die Seite eingefügt, die auch die AJAX-Links beinhaltet:</p>
<pre>
function pollC(id, load){
if (!load&amp;&amp;document.getElementById(id)){
document.getElementById(id).id='';
return;
}
else if (load&amp;&amp;document.getElementById(id)){
if (id=='loadedmarker')  //optional
initLightbox();  //required
return;
}
else if (load&amp;&amp;!document.getElementById(id))
setTimeout("pollC('"+id+"', 'load')", 60);
}
</pre>
<p>Entscheidend bzw. anzupassen ist Zeile 7. Man muss Lightbox dann neu initialisieren, wenn der HTML-Code der Kategorie-Archive dank AJAX in die Seite integriert wurde, so dass Lightbox, denn Code neu parsen kann und so die Stellen findet, wo es gebraucht wird.</p>
<p>Um zu wissen, wann alle Inhalte geladen sind braucht es eine Art Markierung. Dieser Marker &#8211; ein einfaches &lt;span id=&#8220;loadedmarker&#8220;&gt;&lt;/span&gt; &#8211; befindet sich ganz am Ende vom Template des Kategoriearchivs:</p>
<pre>
&lt;MTEntries&gt;
&lt;hr/&gt;

&lt;$MTEntryBody safe_urls="1"$&gt;
&lt;h2 id="a&lt;$MTEntryID pad="1"$&gt;"&gt;&lt;$MTEntryTitle$&gt;&lt;/h2&gt;
&lt;$MTEntryMore safe_urls="1"$&gt;
&lt;/MTEntries&gt;

&lt;span id="loadedmarker"&gt;&lt;/span&gt;
</pre>
<p>Wenn also alle richtigen Inhalte geladen sind, sieht dieses Poll-Skript den Marker und initialisiert Lightbox neu.</p>
<p>Nun funktioniert Lightbox zwar, aber nur auf den ersten Blick. Lade ich die gleiche Seite ein zweites Mal mit AJAX, dann <em>erinnert</em> sich das Poll-Skript daran und intialisiert Lightbox nicht mehr. Einfach ausgedrückt muss Lightbox jedes mal neu intialisiert werden, wenn sich der Inhalt ändert. Ob die Inhalte bereits vorher cached wurden oder nicht, spielt keine Rolle. Lightbox braucht aktuell für jede Änderungen des HTML-Code eine neue Intialisierung. Dieses Problem löst das Poll-Skript indem es zusätzlich alte, bereits einmal gelandene IDs löscht.</p>
<p>Die eigentliche AJAX-Links, die den Ablauf dann auslösen werden somit etwas länger:</p>
<pre>
&lt;a href="javascript://" onmousedown="pollC('loadedmarker')"
onmouseup="getMyHTML('../portfolio/archiv/category/nonprint',
'ajax-container');pollC('loadedmarker', 'load')"&gt;Non-Print&lt;/a&gt;
</pre>
<p>Bei onmousedown löscht er die Marker-ID bzw. setzt den Status auf <em>unbekannt</em>, um wirklich jedesmal neu zu intialisieren. Bei onmouseup werden die externen Inhalte in das Div mit der ID <em>ajax-container</em> geladen um darin den Marker &#8211; das span mit der <em>loadedmarker</em> &#8211; zu finden und den Status auf geladen zu setzen, woraufhin Lightbox neu initialisiert wird. Aufwendiger als gedacht, aber nun funzt&#8217;s. Jetzt ehlen nur noch die echten Inhalte^^</p>
<p>Jede Skript-Spielerei die eine nächträgliche Initialisierung bei AJAX-geladenen Inhalten benötigt, lässt sich mit <a href="http://www.dynamicdrive.com/forums/showthread.php?t=13003" title="dynamicdrive.com/forums">diesem Skript</a> richten. <a href="http://www.huddletogether.com/projects/lightbox/" title="Lightbox">Lightbox</a> hier ist nur ein klassisches Beispiel.</p>        <p>Feedback: <a href="https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten#comments" title="3 Kommentare">3 Kommentare</a></p>
    </div>]]>
  </content:encoded>
  
    <wfw:commentRss>https://www.coldheat.de/2006/11/lightbox-skript-bei-ajax-inhalten/feed</wfw:commentRss>
    <slash:comments>3</slash:comments>
    </item>
  </channel>
</rss>
