Reiner Wirth: Fehlermeldung im Firefox: Toplifter is not defined

Hallo miteinander,

ich habe bereits einige Stellen gefunden im Forum, wo diese Meldung besprochen wurde, stehe aber trotzdem weiter auf dem Schlauch…

deshalb hier meine Frage, ob wer helfen kann. Ich benutze eine Funktion:

function topLifter(idEbene)
 {
 zTop=zTop+1;
   document.getElementById(idEbene).style.zIndex=zTop;
   document.getElementById(idEbene).style.visibility='visible';
 }

zTop wurde beim Laden (global) auf 100 gesetzt, idEbene wird aktuell übergeben.

Die Funktion tut im Safari-Browser (nicht im Firefox-Browser) zweierlei:

1. Per link wird die Ebene sichtbar und über bereits vorher aufgerufene nach oben gehievt,

2. falls sie schon sichtbar ist, jedoch von anderen Ebenen teilweise verdeckt ist, kommt sie nach oben. Warum in aller Welt klappt das im Safari-Browser, Firefox bringt diese Meldung. Was ich auch nicht verstehe ist, warum Firefox den Namen topLifter plötzlich Toplifter nennt.

Vielen Dank im voraus für hilfreiche Tips

Reiner Wirth

  1. Hi,

    Was ich auch nicht verstehe ist, warum Firefox den Namen topLifter plötzlich Toplifter nennt.

    vermutlich weil ein Problem vorliegt, welches mit der von Dir genannten Funktion nichts oder nur wenig zu tun hat. Poste bitte einen Link zur Problemseite.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo nochmal,

      Bei den Bemühungen, mein unter Safari laufendes Opus auch für Firefox und (oder) IE zu ertüchtigen, habe ich die html-Seite "abgemagert", um weiter zu kommen.

      An javascript übrig ist jetzt noch dieses:

      <script type="text/javascript"><!--
      function iniZ()
        {
          zTop=100;  // Anfangswert wird on load als globale Variable uebergeben
        }

      function mouse_pos(evt)
        {
          if(!evt) evt = window.event;
          pos = new Object();

      pos.left = evt.clientX;
          pos.top = evt.clientY;

      var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
          window.document.documentElement : window.document.body || null;

      if (b)
       {
         pos.scrollLeft= pos.left + b.scrollLeft;
         pos.scrollTop = pos.top + b.scrollTop;
         rand=pos.top-b.scrollTop;
       }
         else if(document.layers)
       {
          // Netscape 4.
         pos.scrollLeft = evt.pageX;
         pos.scrollTop = evt.pageY;
         pos.left = evt.pageX - window.pageXOffset;
         pos.top = evt.pageY - window.pageYOffset;
       }
         return pos;
       }

      function zeigeEbene(idEbene)
       {
         zTop=zTop+1;
         document.getElementById(idEbene).style.zIndex=zTop;
         document.getElementById(idEbene).style.visibility='visible';
         if(pos.left>=400) {
         pos.left=pos.left-400;
       }
          document.getElementById(idEbene).style.left=pos.left+"px";
          if(rand>500) {
          pos.top=pos.top-500;
       } else {
          pos.top=pos.top+25;
       }
          document.getElementById(idEbene).style.top=pos.top+"px";
       }

      function topLifter(idEbene)
       {
          zTop=zTop+1;
          document.getElementById(idEbene).style.zIndex=zTop;
          document.getElementById(idEbene).style.visibility='visible';
       }
      //--></script>

      Die Fehler-Konsole von Firefox meldet immer wieder:

      evt has no properties   Zeile 15
      idEbene is not defined  Zeile 1

      und zwar in dieser Reihenfolge

      Firefox richtet sich nicht nach den ermittelten Werten für

      pos.left = evt.clientX;
      pos.top = evt.clientY;

      sondern macht das Ebenen-Fenster am oberen Rand auf und nicht in der Nähe der Stelle, die ich anklicke.

      Soll ichs aufgeben, oder hat noch jemand eine Idee?

      Gruß Reiner Wirth

      1. Die Fehler-Konsole von Firefox meldet immer wieder:

        evt has no properties   Zeile 15
        idEbene is not defined  Zeile 1

        aus deinem Code lassen sich diese Meldungen nicht analysieren, weder ist klar in welchen Zeilen die Fehler auftreten, noch wie du die Funktionen überhaupt aufrufst.

        und zwar in dieser Reihenfolge

        Firefox richtet sich nicht nach den ermittelten Werten für

        pos.left = evt.clientX;
        pos.top = evt.clientY;

        sondern macht das Ebenen-Fenster am oberen Rand auf und nicht in der Nähe der Stelle, die ich anklicke.

        Weil du sehr wahrscheinlich mouse_pos() nicht in einem Event aufrufst oder das event Objekt nicht übergibst.

        Soll ichs aufgeben, oder hat noch jemand eine Idee?

        wie gesagt, mit dem Code läßt sich die so nicht helfen, das wichtigste fehlt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. evt has no properties   Zeile 15
          idEbene is not defined  Zeile 1

          aus deinem Code lassen sich diese Meldungen nicht analysieren, weder ist klar in welchen Zeilen die Fehler auftreten, noch wie du die Funktionen überhaupt aufrufst.

          Mit Zeile 15 könnte gemeint sein:

          pos.left = evt.clientX;  //das steht in Zeile 15 innerhalb Deiner mouse_pos Funktion

          aufgerufen wird mouse_pos erstmals in Zeile 124 mit:

          <csaction name="c14554690" class="Call Function" type="onevent" val0="mouse_pos" val1=""></csaction>

          Dieser csaction name kommt nochmals vor in Zeile 210:

          CSAct[/*CMP*/ 'c14554690'] = new Array(CSCallFunction,'mouse_pos','');

          Was mit Zeile 1 gemeint sein kann, ist mir vollkommen unklar, da steht bei mir nur:
          <html><head>

          idEbene ist der Name der aufgerufenen Ebene, die gezeigt werden soll in der Nähe der Mausposition.

          Kannst Du damit etwas anfangen?

          Vielen Dank für die Hilfe!

          Reiner

          1. aufgerufen wird mouse_pos erstmals in Zeile 124 mit:

            <csaction name="c14554690" class="Call Function" type="onevent" val0="mouse_pos" val1=""></csaction>

            Das ist etwas aus deinem Editor.

            Dieser csaction name kommt nochmals vor in Zeile 210:

            CSAct[/*CMP*/ 'c14554690'] = new Array(CSCallFunction,'mouse_pos','');

            Das ist ein Array mit einem Index. Hier wird irgendetwas vorbereitet, ich weiß zwar dass das von einem Editor stammt - golive? - aber was da tut entschliesst sich meiner Kentnnis.

            Was mit Zeile 1 gemeint sein kann, ist mir vollkommen unklar, da steht bei mir nur:

            Es wäre auch noch interessant zu wissen welchen Browser du benutzt?
            Wie auch immer, Zeile 1 oder 0, deutet auf einen Aufruf innerhalb eines HTML Tags hin. Den sehe ich aber bei dir nirgends.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Das ist ein Array mit einem Index. Hier wird irgendetwas vorbereitet, ich weiß zwar dass das von einem Editor stammt - golive? - aber was da tut entschliesst sich meiner Kentnnis.

              ja goLive benutze ich

              Es wäre auch noch interessant zu wissen welchen Browser du benutzt?

              ich arbeite mit Safari, dort geht alles, ich muß aber versuchen, mehr als nur die 3% Mac-User zu erreichen, deshalb wollte ich erst mal an Firefox anpassen, weil ich dort die Fehler-Konsole habe. Gibt es denn im IE auch eine Fehler-Konsole o. ä.?

              Wie auch immer, Zeile 1 oder 0, deutet auf einen Aufruf innerhalb eines HTML Tags hin. Den sehe ich aber bei dir nirgends.

              Der Aufruf im Tag ist bei mir in Zeile 381:

              <area title="Klick:  anzeigen" onclick="CSAction(new Array(/*CMP*/'c14554690',/*CMP*/'c14554701'));return CSClickReturn()" shape="rect" coords="657,300,738,332" href="#" alt="" csclick="c14554690,c14554701">

              1. Wie auch immer, Zeile 1 oder 0, deutet auf einen Aufruf innerhalb eines HTML Tags hin. Den sehe ich aber bei dir nirgends.

                Der Aufruf im Tag ist bei mir in Zeile 381:

                <area title="Klick:  anzeigen" onclick="CSAction(new Array(/*CMP*/'c14554690',/*CMP*/'c14554701'));return CSClickReturn()" shape="rect" coords="657,300,738,332" href="#" alt="" csclick="c14554690,c14554701">

                wir drehen uns ein bisschen im Kreis. Das ist ein indirekter Aufruf, der mit den IDs aus dem vorherigen Posting von dir, vermutlich dann in CSAction() die richtige Funktion aufruft. Falls dir das jetzt kompliziert oder umständlich vorkommt, das ist es auch. Keine Ahnung warum golive da so ein geschiss macht (dreamweaver übrigens auch), auf jeden Fall wird irgendwo in dieser Kette vergessen das event Objekt zu übergeben.
                Dein ganzes Problem liegt also nicht am JS sondern am Editor.

                Um die mausposition zu bestimmen müßtest du hier im onclick Event event als Parameter für die Funktion mouse_pos() übergeben, geht aber nicht.
                Alternativ könnte man das ganze auch mit einer globalen Variabel lösen und dann den Aufruf ganz weglassen:

                var mouse_pos = {};  
                window.document.onmousemove = function(evt)  
                {  
                    if(!evt) evt = window.event;  
                  
                    mouse_pos.left = evt.clientX;  
                    mouse_pos.top = evt.clientY;  
                  
                    var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?  
                    window.document.documentElement : window.document.body || null;  
                  
                    if (b)  
                    {  
                        mouse_pos.scrollLeft= mouse_pos.left + b.scrollLeft;  
                        mouse_pos.scrollTop = mouse_pos.top + b.scrollTop;  
                    }  
                }  
                
                

                und dann kannst du überall über mous_pos.top/.left die Postion ermitteln.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Alternativ könnte man das ganze auch mit einer globalen Variabel lösen und dann den Aufruf ganz weglassen:

                  var mouse_pos = {};

                  window.document.onmousemove = function(evt)
                  {
                      if(!evt) evt = window.event;

                  mouse_pos.left = evt.clientX;
                      mouse_pos.top = evt.clientY;

                  var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
                      window.document.documentElement : window.document.body || null;

                  if (b)
                      {
                          mouse_pos.scrollLeft= mouse_pos.left + b.scrollLeft;
                          mouse_pos.scrollTop = mouse_pos.top + b.scrollTop;
                      }
                  }

                  
                  > und dann kannst du überall über mous\_pos.top/.left die Postion ermitteln.  
                  >   
                  > Struppi.  
                    
                    
                  Wenn ich die Funktion so schreibe, kommt eine interessante Fehlermeldung:  
                    
                  Firefox meldet wieder: evt is not defined, verweist aber jetzt auf die Quelldatei seiner CSScritLib.js  
                    
                    
                  dort steht dies:  
                    
                  function CSCallFunction(action)  
                  {  
                   var str = action[1];  
                   str += "(";  
                   str += action[2];  
                   str += ");"  
                    
                   return eval(str);                    //  (mein Kommentar:) diese Zeile ist ausgewählt  
                  }  
                    
                  da steh ich voll auf dem Schlauch, was meinst Du?  
                    
                  Reiner
                  
                  1. Wenn ich die Funktion so schreibe, kommt eine interessante Fehlermeldung:

                    Firefox meldet wieder: evt is not defined, verweist aber jetzt auf die Quelldatei seiner CSScritLib.js

                    Wenn du die obige Funktion ohne irgendwelchen golive SchnickSchnack in den Quelltext schreibst hat die nichts mit der Fehlermeldung zu tun.

                    dort steht dies:

                    function CSCallFunction(action)
                    {
                    var str = action[1];
                    str += "(";
                    str += action[2];
                    str += ");"

                    return eval(str);                    //  (mein Kommentar:) diese Zeile ist ausgewählt
                    }

                    Das ist der Grund für alle deine Schwierigkeiten und das läßt sich auch nicht verbessern.

                    da steh ich voll auf dem Schlauch, was meinst Du?

                    Verzichte auf golive im zusammenhang mit JS. Füge die von dir gewünschten JS Funktionen von Hand in den Quelltext ein.

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Verzichte auf golive im zusammenhang mit JS. Füge die von dir gewünschten JS Funktionen von Hand in den Quelltext ein.

                      Struppi.

                      bevor ich diese Handarbeiten erledige, kannst Du mir sagen, warum das alles im Safari-Browser rund läuft? (nebenbei bemerkt, die Variante als globale Funktion funktioniert nicht im Safari, die andere sehr wohl).

                      Vielen Dank für Deine Antworten.

                      Reiner

                      1. bevor ich diese Handarbeiten erledige, kannst Du mir sagen, warum das alles im Safari-Browser rund läuft? (nebenbei bemerkt, die Variante als globale Funktion funktioniert nicht im Safari, die andere sehr wohl).

                        Weil der Safari Browser vermutlich ein globales Event Objekt verwendet
                        Die zweite Aussage kann ich nicht nachvollziehen und ist im zusamenhang mit der ersten unlogisch, d.h. du machst irgendetwas falsch mangels Code oder Fehlermeldungen läßt sich aber nicht sagen was.

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Die "globale" Version läuft jetzt im Safari, danke.

                          Ich habe jetzt goLive verlassen und arbeite "zu Fuß" weiter.

                          Wenn ich jetzt Firefox anpasse, muss ich dann nicht an:

                          var mouse_pos = {};
                          window.document.onmousemove = function(evt)
                          {
                              if(!evt) evt = window.event;

                          mouse_pos.left = evt.clientX;
                              mouse_pos.top = evt.clientY;

                          var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
                              window.document.documentElement : window.document.body || null;

                          if (b)
                              {
                                  mouse_pos.scrollLeft= mouse_pos.left + b.scrollLeft;
                                  mouse_pos.scrollTop = mouse_pos.top + b.scrollTop;
                              }

                          // brauche ich dann für Firefox noch ein else if, der ist doch aus dem Stall Mozilla, oder?

                          else if(document.layers)
                              {
                                  // Netscape 4.
                                  mouse_pos.scrollLeft = evt.pageX;
                                  mouse_pos.scrollTop = evt.pageY;
                                  mouse_pos.left = evt.pageX - window.pageXOffset;
                                  mouse_pos.top = evt.pageY - window.pageYOffset;

                          }
                          }

                          sehr spannend für mich!

                          Gruß Reiner

                          1. Ich habe jetzt goLive verlassen und arbeite "zu Fuß" weiter.

                            gut

                            Wenn ich jetzt Firefox anpasse, muss ich dann nicht an:

                            if (b)

                            // brauche ich dann für Firefox noch ein else if, der ist doch aus dem Stall Mozilla, oder?

                            ja und, der kennt auch die Eigenschaft scrollLeft/Top.

                            // Netscape 4.

                            ob das wirklich noch Sinn macht ist fraglich. Versuch mal mit dem NC 4 zu surfen ohne das du JS abgeschaltet hast, der fliegt dir schnell um die Ohren.

                            Struppi.

                            1. ich habe inzwischen goLive soweit überwunden, daß ich das meiste ohne ihn schaffe:

                              z.B. visible, unsvisible mit:

                              function zeigeEbene(idEbene)
                               {
                               zTop=zTop+1;
                                 document.getElementById(idEbene).style.zIndex=zTop;
                                 document.getElementById(idEbene).style.visibility='visible';
                                 if(mouse_pos.left>=400) {
                                 mouse_pos.left=mouse_pos.left-400;
                                 }
                                 document.getElementById(idEbene).style.left=mouse_pos.left+"px";
                                 if(rand>500) {
                                 mouse_pos.top=mouse_pos.top-500;
                               } else {
                                 mouse_pos.top=mouse_pos.top+25;
                               }
                               document.getElementById(idEbene).style.top=mouse_pos.top+"px";
                               }

                              hier kann ich ohne große Mühe meine Ebene über der Mausposition zeigen und sie wieder verstecken:

                              function versteckeEbene(idEbene)
                               {
                                 document.getElementById(idEbene).style.visibility='unvisible';
                               }

                              jetzt gehts aber ans Eingemachte: das dragging, ich hab mich umgesehen und in SELFHTML noch nicht viel gefunden.

                              Mit:

                              function zieheEbene(idEbene)
                               {
                                 Drag.init(document.getElementById(idEbene));
                               }

                              wird es ja wohl noch nicht getan sein, vermute ich.
                              Kannst Du mir bitte noch einen Hinweis geben, wie ich da rangehen muß?

                              Dann hätte ich meinen Baukasten ziemlich komplett.

                              Reiner

                              1. jetzt gehts aber ans Eingemachte: das dragging, ich hab mich umgesehen und in SELFHTML noch nicht viel gefunden.

                                ich hab da grad die Tage was gemacht: http://javascript.jstruebig.de/javascript/67/

                                Wobei hier die mous_pos Funktion in die Quere kommt, da bei document.onmousemove verwenden.

                                Struppi.

                                --
                                Javascript ist toll (Perl auch!)
                                1. jetzt gehts aber ans Eingemachte: das dragging, ich hab mich umgesehen und in SELFHTML noch nicht viel gefunden.

                                  ich hab da grad die Tage was gemacht: http://javascript.jstruebig.de/javascript/67/

                                  Wobei hier die mous_pos Funktion in die Quere kommt, da beide document.onmousemove verwenden.

                                  Sieht toll aus, Dein script, würde ich mich sofort drauf stürzen, aber wie lösen wir den Konflikt, könnte ich denn statt onmousemove onmousedown verwenden, o nein, das benutzt Du ja auch. Gibt es denn einen Unterschied zwischen onclick und onmousedown?

                                  Reiner

  2. hi,

    Was ich auch nicht verstehe ist, warum Firefox den Namen topLifter plötzlich Toplifter nennt.

    Vermutlich, weil du topLifter irgendwo Toplifter genannt hast.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Vermutlich, weil du topLifter irgendwo Toplifter genannt hast.

      gruß,
      wahsaga

      vielen Dank, das war tatsächlich so, leider gehts aber jetzt weiter:

      Wie ich meine 1800 Zeilen zu euch verlinken soll, weiß ich nicht, weil ich hinter einer fetten Firewall sitze…

      aber ich bekomme noch eine weitere Fehlermelung, die eine Funkrion betrifft, die ich von Struppi bekam (sagt mir bitte nicht: never use a script, you dont understand), Struppi hat erlaubt, es zu benutzen, es ist in meinen Augen genial:

      function mouse_pos(evt)
      {
          if(!evt) evt = window.event;
          pos = new Object();

      pos.left = evt.clientX;
          pos.top = evt.clientY;

      var b = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
          window.document.documentElement : window.document.body || null;

      if (b)
          {
              pos.scrollLeft= pos.left + b.scrollLeft;
              pos.scrollTop = pos.top + b.scrollTop;
              rand=pos.top-b.scrollTop;
          }
          else if(document.layers)
          {
              // Netscape 4.
              pos.scrollLeft = evt.pageX;
              pos.scrollTop = evt.pageY;
              pos.left = evt.pageX - window.pageXOffset;
              pos.top = evt.pageY - window.pageYOffset;
          }
          return pos;
       }

      hier wird leider gemeldet:    evt has no properties
      und weiter:      document.getElementById(idEbene) has no properties

      dies hat wahrscheinlich wieder mit dem topLifter zu tun, den ich im Anschluß an Struppis mouse_pos(evt) verwende???

      Gruß Reiner

      1. hi,

        Wie ich meine 1800 Zeilen zu euch verlinken soll, weiß ich nicht, weil ich hinter einer fetten Firewall sitze…

        Zum Glück gibt es Firewalls - die uns davor schützen, mit 1800 Zeilen Code beglückt zu werden.

        hier wird leider gemeldet:    evt has no properties

        Und wo wird diese Funktion mouse_pos aufgerufen?

        und weiter:      document.getElementById(idEbene) has no properties

        Das kommt im gezeigten Code-Ausschnitt gar nicht vor.

        Ein wenig debuggen könntest du aber schon mal selber, oder?

        1800 Zeilen Code sind ja hoffentlich nicht ausschliesslich zusammengekl^H^H^H^Hkopiert, ohne die geringste Ahnung von Debugging und Fehlersuche unter Javascript?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. aber ich bekomme noch eine weitere Fehlermelung, die eine Funkrion betrifft, die ich von Struppi bekam (sagt mir bitte nicht: never use a script, you dont understand), Struppi hat erlaubt, es zu benutzen, es ist in meinen Augen genial:

        Naja, allein schon der fehlende Test auf das evt Objekt macht es nur bedingt gut ;-). Ausserdem hast du ein 'var' unterschlagen, ich arbeite sehr selten mit globalen Variabeln.

        function mouse_pos(evt)
        {
             if(!evt) evt = window.event;
             if(!evt) return alert('Das Event Objekt fehlt');
             var pos = new Object();
        ....

        hier wird leider gemeldet:    evt has no properties
        und weiter:      document.getElementById(idEbene) has no properties

        dies hat wahrscheinlich wieder mit dem topLifter zu tun, den ich im Anschluß an Struppis mouse_pos(evt) verwende???

        Evtl. liegt es daran, dass kein Event existiert oder du ihn vergißt an die Funktionen weiterzureichen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Evtl. liegt es daran, dass kein Event existiert oder du ihn vergißt an die Funktionen weiterzureichen.

          Struppi.

          Vielen Dank, Struppi und auch den anderen,

          eher wahrscheinlich ist, daß ich erst mal wieder verstehen muß, in welcher Reihenfolge ich die Funktionen aufrufe bzw. welche welche aufruft. Das dauert noch.

          Leider… alles funktioniert so schön im Safari-Browser, den niemand benutzt. Das hat man nun davon, wenn man sich auf die Windows-Welt einlassen muss.

          Trotzdem vielen Dank, vielleicht melde ich mich hier nochmal, wenn ich klarer sehe und meine Fragen präziser stellen kann.

          Reiner Wirth