Lightbox Inhalt per Prototype nachladen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit prototype

    hi,

    ich habe gerade deine super anleitung gelesen und versucht es zu integrieren.. jedoch ohne erfolg.. ich benutze http://prototype.conio.net/ (JavaScript Framework), was folgenden Ajax aufruf hat:

    Quellcode

    1. function getHTML(url,param)
    2. {
    3. var url = url;
    4. var pars = param;
    5. var myAjax = new Ajax.Updater({success: 'content'}, url, { method: 'get', parameters: pars, onFailure: reportError });
    6. }


    ich habe vergebens probiert den Listener zu integrieren :(

    Quellcode

    1. link.onclick = function () {myLightbox.start(this); return false;}


    Kannst du mir dabei weiterhelfen?


    edit:

    hi, also ich habs weiterprobiert und folgendes hinbekommen:

    Quellcode

    1. function pollContent(id){
    2. if (document.getElementById&&document.getElementById(id)){
    3. alert(id);
    4. var targetObj = document.getElementById(id);
    5. var anchors = targetObj.getElementsByTagName('a');
    6. for (var i=0; i<anchors.length; i++) {
    7. alert(i);
    8. var anchor = anchors[i];
    9. var relAttribute = String(anchor.getAttribute('rel'));
    10. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    11. anchor.onclick = function () {myLightbox.start(this); return false;}
    12. }
    13. }
    14. }else{
    15. alert("nochmal");
    16. setTimeout("pollContent('"+id+"')", 1000)
    17. }
    18. }
    Alles anzeigen


    mit folgender URL rufe ich auf:

    Quellcode

    1. <a href=# onclick="getHTML('test.php','class=projekte');pollContent('content');">


    jetzt das problem..

    die funktion greift immer, aber geht immer nur ab dem zweiten besuch des links in den "if" teil rein!

    meine "else abfangtechnik" greift gar nicht :(

    hilfääää :roll:

    soooooooo :) sorry.. ein letztes mal.. jetzt gehts.. zwar komisch aber geht halt
    irgendwie kommt alles bischen verzögert und ich hoffe das ich mit 1500 ms mit im rennen bin (1000ms gehen nicht!).. ich hoffe irgendwann auf eine bessere lösung..

    Quellcode

    1. function pollContent(id){
    2. if (document.getElementById&&document.getElementById(id)){
    3. setTimeout("wait('"+id+"')", 1500);
    4. }else{
    5. setTimeout("pollContent('"+id+"')", 1000)
    6. }
    7. }
    8. function wait(id){
    9. if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(50); };
    10. var targetObj = document.getElementById(id);
    11. var anchors = targetObj.getElementsByTagName('a');
    12. for (var i=0; i<anchors.length; i++) {
    13. var anchor = anchors[i];
    14. var relAttribute = String(anchor.getAttribute('rel'));
    15. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    16. //alert('ja');
    17. anchor.onclick = function () {myLightbox.start(this); return false;}
    18. }
    19. }
    20. }
    21. /* nur beim ie benötigt */
    22. function pause(numberMillis) {
    23. var now = new Date();
    24. var exitTime = now.getTime() + numberMillis;
    25. while (true) {
    26. now = new Date();
    27. if (now.getTime() > exitTime)
    28. return;
    29. }
    30. }
    Alles anzeigen


    Gruss
    h4bib
  • Prototype ist toll :D
    versuch mal Folgendes

    Quellcode

    1. var ff = function() {
    2. var id = 'xx';
    3. if (document.getElementById&&document.getElementById(id)){
    4. alert(id);
    5. var targetObj = document.getElementById(id);
    6. var anchors = targetObj.getElementsByTagName('a');
    7. for (var i=0; i<anchors.length; i++) {
    8. alert(i);
    9. var anchor = anchors[i];
    10. var relAttribute = String(anchor.getAttribute('rel'));
    11. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    12. anchor.onclick = function () {myLightbox.start(this); return false;}
    13. }
    14. }
    15. }else{
    16. alert("nochmal");
    17. setTimeout("pollContent('"+id+"')", 1000)
    18. }
    19. }
    20. if(enableCache){
    21. jsCache[url] = dynamicContent_ajaxObjects[ajaxIndex].response;
    22. }
    23. dynamicContent_ajaxObjects[ajaxIndex] = false;
    24. ajax_parseJs(targetObj)
    25. }
    Alles anzeigen


    und ändere dein AJAX Objekt so um

    Quellcode

    1. var myAjax = new Ajax.Updater({onSuccess: ff}, ....


    dadurch müsste protoype sich nun darum kümmern, die Lightbox Parse Funktion sofort aufzurufen, wenn der Inhalt geladen wurde.
  • also leider hat das ganze nicht geklappt.. er läd dir inhalte irgendwie nicht..

    alert(id); in der funktion ff() gibt er noch aus...

    hier nochmal das ganze script:

    </script>

    Quellcode

    1. <script language="JavaScript">
    2. //Effect.Fade('content');
    3. //Effect.Fade('systemWorking');
    4. //Effect.Appear('systemWorking');
    5. //Effect.Appear('content');
    6. var myGlobalHandlers = {
    7. onCreate: function(){
    8. //Effect.Fade('content',{duration: 1});
    9. Element.hide('content');
    10. //alert('show systemworking');
    11. Element.show('systemWorking');
    12. },
    13. onComplete: function() {
    14. if(Ajax.activeRequestCount == 0){
    15. Effect.Fade('systemWorking');
    16. //Element.hide('systemWorking');
    17. //alert('hide systemworking');
    18. //alert('show content');
    19. Effect.Appear('content',{duration: 1});
    20. //Element.show('content');
    21. }
    22. }
    23. };
    24. Ajax.Responders.register(myGlobalHandlers);
    25. function getHTML(url,param)
    26. {
    27. var url = url;
    28. var pars = param;
    29. var myAjax = new Ajax.Updater({success: ff(url)}, url, { method: 'get', parameters: pars, onFailure: reportError });
    30. }
    31. function reportError(request)
    32. {
    33. $('systemWorking').innerHTML = request.responseText;
    34. }
    35. function ff(){
    36. var id = 'content';
    37. var targetObj = document.getElementById(id);
    38. var anchors = targetObj.getElementsByTagName('a');
    39. alert(id);
    40. for (var i=0; i<anchors.length; i++) {
    41. alert(i);
    42. var anchor = anchors[i];
    43. var relAttribute = String(anchor.getAttribute('rel'));
    44. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    45. alert('ja');
    46. anchor.onclick = function () {myLightbox.start(this); return false;}
    47. }
    48. }
    49. }
    Alles anzeigen


    kurzes update: nur wenn ich den wert 'id' zurückgebe läd er halt inhalte nach.. jedoch greift die for schleife irgendwie nach belieben manchmal zu... :/ also leider hats erst mal nix gebracht.. so schade ey!

    Quellcode

    1. function ff(){
    2. var id = 'content';
    3. var targetObj = document.getElementById(id);
    4. var anchors = targetObj.getElementsByTagName('a');
    5. for (var i=0; i<anchors.length; i++) {
    6. var anchor = anchors[i];
    7. var relAttribute = String(anchor.getAttribute('rel'));
    8. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    9. alert(anchor);
    10. anchor.onclick = function () {myLightbox.start(this); return false;}
    11. }
    12. }
    13. return id;
    14. }
    Alles anzeigen
  • nutzt du firefox und meldet die Fehlerkonsole irgendwelche Fehler?
    "element not found" oder ähnliches?

    Solltest übrigens drauf achten validen HTML Code zu schreiben:
    <script language="JavaScript"> gibts nicht mehr.
    Heißt

    Quellcode

    1. <script type="text/javascript">


    Parameter musst du alles in Anführungszeichen schreiben:

    Quellcode

    1. <a href="#" onclick="...">...</a>
  • die konsole gibt keine fehler aus..

    hier ist der aufruf..

    <a href="#" onclick="getHTML('test.php','class=projekte');">

    also die funktion ff() versucht meiner meinung nach alle "a" tags vor dem laden das contents zu finden und greift deswegen nicht richtig irgendwie.. also es müsste erst nach dem laden des contents, die schleife durchlaufen.. dann müsste es doch gehen?

    ich werd am ende eh mal alles durchchecken bezüglich validem html.. aber mich ärgerts das das ganze nicht läuft... sehr schade :(

    meine version von gestern ging an meinem heimischen rechner zb. nur sporadich, wobei hier auf arbeit alles lief..

    sooooooo kurzes update mal wieder, jetzt gehts, zwar bischen unschön aber läuft:

    Quellcode

    1. <a onmouseover="ff();" rel="lightbox" href="bild.jpg"><img src=bild_klein.jpg></a>


    und hier die passende funktion dann halt:

    Quellcode

    1. function ff(){
    2. var id = 'content';
    3. if (document.getElementById&&document.getElementById(id)){
    4. //alert(id);
    5. var targetObj = document.getElementById(id);
    6. var anchors = targetObj.getElementsByTagName('a');
    7. for (var i=0; i<anchors.length; i++) {
    8. var anchor = anchors[i];
    9. var relAttribute = String(anchor.getAttribute('rel'));
    10. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
    11. //alert(anchor);
    12. anchor.onclick = function () {myLightbox.start(this); return false;}
    13. }
    14. }
    15. }
    16. }
    Alles anzeigen


    also erst wenn man ein mouseover tätigt klappts tatsächlich...