Manu: Prototype Window

Hallo noch einmal,

wo ich schon dabei bin, ich habe leider noch ein Problem:

Um lästige Popups zu vermeiden, benutze ich Prototype Window (http://prototype-window.xilinus.com/) - vielleicht kennts ja einer - eine ziemlich coole Angelegenheit, die auch soweit bestens funktioniert .
Allerdings treten bei meinem 'Lieblingsbrowser' IE mal wieder Probleme auf:

Um den Content des Prototype Window zu füllen schiebe ich eine Tabelle  an eine JS-Funktion, die das Window erstellt, füllt und dann anzeigt. Habe ich nun allerdings richtig viele Daten, macht der IE nichts, nada, niente. Keine Fehlermeldung. Einfach nichts. FF zeigt immer alles, der IE auch, wenn es nur wenig Inhalt ist. :(

Was könnte das Problem sein?

  1. Hallo Manu,

    Um den Content des Prototype Window zu füllen schiebe ich eine
    Tabelle  an eine JS-Funktion, die das Window erstellt, füllt und
    dann anzeigt.

    Wie bindest du den Content in die PWC ein - als AJAX oder iFrame?
    Existiert der Content als statisches Dokument oder wird er dynamisch generiert?
    Was bedeutet "...schiebe ich eine Tabelle an eine JS-Funktion...", bzw. an
    welche Funktion "schiebst" du?

    Ich habe eine Weile mit der PWC (Prototype Window Class) experimentiert, allerdings
    ohne das von dir beschriebene Problem bemerkt zu haben. Hab's auch grad kurz
    getestet um möglicherweise nachvollziehen zu können, was du meinst:

    • dynamisch generierte Tabelle (4 Spalten, ca. 450 Zeilen)
    • via Ajax als Content in ein Window implementiert
    • FF 2.0.0.6 und IE 6
    • Ergebnis: keine Probleme

    Grüße, dicon

    1. Hallo Dicon & danke für Deine Antwort!

      Der Content wird in einer ziemlich großen Übersichtstabelle dynamisch generiert. (x)ajax kommt bei dem Window nicht zum Zug. Ich habe ein Monsterarray, aus dem alle Daten kommen. Das schiebe ich in mein Smarty-Template und dabei wird in einer foreach-Schleife die Table (s.u.) aufgebaut.

      Meine JS-Funktion sieht so aus:

      function showDialogue(myString) {

      var win = new Window({className: "dialog",  width:600, height:600, zIndex: 100, resizable: true, title: "Kunden", showEffect:Effect.Appear, hideEffect: Effect.Fade, draggable:true, wiredDrag: true});
       var myStringx = myString.replace(/___/g, "'");
       win.getContent().update = myStringx;
       win.showCenter();

      }

      (*)Erzeugt wird das Window so:

      <a href='JavaScript:showDialogue("<table cellspacing="2" cellpadding="2" border="0" class="dialogue"><tr><td class="header" style="text-decoration:underline;"><a href="#" onclick="window.open(___analysis_pdata.php?basesz=1189089764&sz2=1189166919&level=gesamt&pid=1000221#1000221___)">Kunde 1</a></td><td class="headerc">Günstiger</td><td class="headerc">Teurer</td></tr><tr><td class="header3" style="white-space:nowrap;">&nbsp;&nbsp;&nbsp;Summe</td><td width="100" class="center">-3&#039;949</td><td width="100" class="center">0</td></tr><tr><td class="header3" style="white-space:nowrap;" style="white-space:nowrap;">&nbsp;&nbsp;&nbsp;Anzahl Anlagen</td><td class="center">1</td><td class="center">0</td></tr></table>");'>xyz</a>

      Sehr unübersichtlich, hoffentlich ohne cut'n'paste-Fehler...hab nur einen Kunden drin gelassen, die anderen 49 gelöscht...

      Wie gesagt, so hats in FF ohne Probs geklappt, im IE nur, wenn ich wenige Kunden anzeige...

      1. Ups, da war noch ein Fehler drin:
        Es muss heißen
        win.getContent().innerHTML = myStringx;

        1. Hallo Manu,

          wenn ich mir den Code so anschau - deinen und die PWC-Bibliothek - weiß ich wieder,
          warum ich mich seinerzeit nicht mehr damit beschäftigen wollte... ;O)

          Egal... das hilft dir auch nicht weiter. Daher mal folgender Lösungsversuch:

          Wenn du dir im FF mal den Quellcode des generierten Windows inkl. der Tabelle anschaust,
          siehst du, dass die Tabelle, die du als Parameter an showDialogue übergibst,
          via innerHTML als DIV direkt in eine Tabellenzelle eingeklinkt wird, die im
          DOM bereits existiert. Auf gut Deutsch: Deine Tabelle wird zum Bestandteil
          der Tabellezelle <td id="window_[id]_table_content" class="dialog_content"...>.

          Irgendwo hab ich die Tage grad gelesen, dass der IE für Tabellen, die dynamisch
          ins DOM eingehängt werden, der tbody-Tag gefordert wird. Der fehlt aktuell
          noch in dem Code, der das Window erzeugt: <table...><tbody>...</tbody></table>

          Versuch das mal... mehr fällt mir dazu leider so schnell auch nicht ein.

          Grüße, dicon

          1. Hi!

            Ja, vor dem problem stand ich schon, als ich Tabellenzeilen mit xajax generiert habe (was habe ich geflucht über diesen %$&%$&%§-Browser), aber tbody, thead, tfooter habe ich schon eingebaut gehabt - leider mit dem selben Ergebnis :(

            Der IE zeigt ja auch kleine Tabellen an...

            Hat der IE denn generell ein Problem damit, riesige Strings auf Clientseite zu übergeben?

            1. Das sind Probleme, die nerven... :o)),

              Ich hab dein Konzept anhand des o.b. Code mal nachgebaut und ausprobiert.
              Nachfolgendes läuft im FF und (!) im IE 5+6. Mangels "echter" Daten hab ich "Kunde 1"
              453mal dubliziert und als Argument an die Funktion showDialogue übergeben...
              Folgende Änderungen (eigentlich nur am Syntax) habe ich vorgenommen:

              1. In der Tabellenzelle mit der Klasse "header3" taucht das Attribut
              "style="white-space:nowrap;" 2x auf - eins habe ich entfernt.

              2. geänderter Syntax für den <a>-Tag, der das Window erzeugt:
              <a href="#" onclick='showDialogue("<table cellspacing="2"...><tbody> [Inhalt] </tbody></table>")'>Test</a>

              Das wars. Wie gesagt: [Inhalt] hab ich 453x dubliziert um zu sehen, wie der IE
              drauf reagiert.

              Sollte es bei dir mit diesen Syntax-Anpassungen nicht laufen, bin ich am Ende.

              Grüße, dicon

              1. Hi Dicon,

                DANKE DIR 10000x! Es klappt...! KLASSE!

                Oh, mann, ich hätte auch drauf kommen können, mal onclick auszuprobieren ;D ;D

                Viele Grüße,
                manu