lindsey: Abfrage ob ID existiert

hi

Also ich habe dieses script hier, das eigentlich auch einwandfrei funktioniert, nur bekomm ich ab und zu beim laden der Seite folgenden JS Fehler: "document.getElementById('tooltip') has no properties".

Also habe ich die Abfrage "if(document.getElementById('tooltip'))" eingefügt damit das Script nur dann ausgeführt wird wenn die ID auch schon geladen ist.

Trotzdem bekomme steht dieser Fehler hin und wieder in meiner Konsole ...

function movetooltip (Ereignis) {
      if(document.getElementById('tooltip')) {
        if (!Ereignis)
          Ereignis = window.event;
        if (document.getElementById) {
          document.getElementById('tooltip').style.left  = (Ereignis.clientX+15) + 'px'; <-- Laut Fehler Konsole is der Fehler hier...
          document.getElementById('tooltip').style.top = (Ereignis.clientY-20+document.body.scrollTop) + 'px';
        } else if (document.all) {
          document.all.tooltip.style.left = Ereignis.clientX;
          document.all.tooltip.style.top = Ereignis.clientY;
        }
      }
    }

kann mir hier jemand helfen die Fehlermeldung loszuwerden?

thx,
mfg lindsey

  1. Hallo lindsey!

    "document.getElementById('tooltip') has no properties".

    Wie Du richtig vermutest, deutet es darauf hin, dass zum Zeitpunkt, zu welchem die Funktion ausgeführt wird, das Element mit der ID »tooltip« noch nicht existiert - also noch nicht geladen ist.

    Rufst Du die Funktion nicht über onload() auf? Dann würde die Funktion erst dann ausgeführt werden, wenn das Dokument komplett »steht«.

    } else if (document.all) {
              document.all.tooltip.style.left = Ereignis.clientX;
              document.all.tooltip.style.top = Ereignis.clientY;
            }
          }
        }

    Ob es noch notwendig ist, den IE 4 anzusprechen? Alle modernen und pseudo-modernen (IE 6 und 7) Browser werden schon im if-Zweig abgefangen...

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    1. Hab ich vergessen dazuzuschreiben sry...
      aufgerufen wird das ganze wenn man den Mauszeiger bewegt.
      "document.onmousemove = movetooltip;"

      Also wenn man den Mauszeiger bewegt fährt das Element mit der ID "tooltip" zum Mauszeiger.

      Aber sollte man den Fehler nicht mit "if(document.getElementById('tooltip'))" wegbekommen?

      mfg lindsey

      1. Hallo lindsey!

        "document.onmousemove = movetooltip;"

        Wenn der Mauszeiger bewegt wird, noch während das Dokument geladen wird, feuert onmousemove bereits. Unter Umständen ist das Element mit der ID »tooltip« nicht geladen, also noch nicht existent -> »has no properties«.

        Aber sollte man den Fehler nicht mit "if(document.getElementById('tooltip'))" wegbekommen?

        Nach meinem Verständnis müsste es schon reichen, was steht sonst noch im JavaScript-Code? Ich habe es eben getestet:

          
         if(document.getElementById('tooltip')) {  
           alert("tooltip ist da");  
         } else {  
           alert("tooltip nicht da");  
         }  
        
        

        Und im HTML ein p-Element abwechselnd die ID »tooltip« gegeben und wieder entfernt. Ich komme immer im richtigen Zweig...

        Wie dem auch sei, sicherer fährst Du mit diesem Konstrukt:

          
        window.onload = function() {  
           document.onmousemove = movetooltip;´  
        }  
        
        

        Vorsicht, wenn Du im body-Element noch ein Attribut onload hast!

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        1. Re!

          if(document.getElementById('tooltip')) {
             alert("tooltip ist da");
          } else {
             alert("tooltip nicht da");
          }

            
          
          > Und im HTML ein p-Element abwechselnd die ID »tooltip« gegeben und wieder entfernt. Ich komme immer im richtigen Zweig...  
            
          ...der ja immer der else-Zweig ist, da dieses JavaScript ausgeführt wird, bevor das Dokument geladen ist.  
            
          Mit:  
            
          ~~~javascript
            
           window.onload = function () {  
           alert('onload feuert');  
           if(document.getElementById('tooltip')) {  
             alert("tooltip ist da");  
           } else {  
             alert("tooltip nicht da");  
           }  
           }  
          
          

          wird, je nachdem ob das p-Element die ID »tooltip« hat oder nicht, entweder »tooltip ist da« oder »tooltip nicht da« ausgegeben.

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --

          _ - jenseits vom delirium - _
          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Nichts ist unmöglich? Doch!
          Heute schon gegökt?
    2. Hi,

      } else if (document.all) {
      Ob es noch notwendig ist, den IE 4 anzusprechen?

      der IE 4 wird in diesen Script-Teil niemals gelangen, da durch das "if (document.getElementById('tooltip'))" bereits gewährleistet ist, dass die Abfrage "if (document.getElementById)" immer wahr sein muss. Statt dessen erfährt ein IE 4 in der ersten Abfrage einen JavaScript-Fehler.

      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 Cheatah!

        der IE 4 wird in diesen Script-Teil niemals gelangen, da durch das "if (document.getElementById('tooltip'))" bereits gewährleistet ist, dass die Abfrage "if (document.getElementById)" immer wahr sein muss. Statt dessen erfährt ein IE 4 in der ersten Abfrage einen JavaScript-Fehler.

        Du hast Recht, doch war meine Anmerkung eher allgemein zu verstehen (unter Berücksichtigung der Gegebenheit, dass lindsey diese spezielle Abfrage nach der Verfügbarkeit von »tooltip« ja nachträglich im Code eingefügt hat).

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
  2. Trotzdem bekomme steht dieser Fehler hin und wieder in meiner Konsole ...

    Das kann nicht sein.

    function movetooltip (Ereignis) {
          if(document.getElementById('tooltip')) {
            if (!Ereignis)
              Ereignis = window.event;
            if (document.getElementById) {
              document.getElementById('tooltip').style.left  = (Ereignis.clientX+15) + 'px'; <-- Laut Fehler Konsole is der Fehler hier...

    In welchem Browser? Das kann so nicht sein.

    Struppi.

  3. hi ^^

    ich hab das ganze jetzt so gelöst das ich das Script nur ausführe wenn der tooltip eingeblendet ist. Dadurch ist die Fehlermeldung fast ^^ nichtmehr in meiner Konsole ^^

    Ich werd das Script jetzt so lassen wies ist (ma abgesehen davon das ich das Zeugs fürn ie4 rausnehm...) weils eigentlich Fehlerfrei laufen müsste und es ja auch fast immer macht ^^

    Danke an alle die mir geantwortet haben,
    mfg lindsey

    1. Hallo lindsey!

      ich hab das ganze jetzt so gelöst das ich das Script nur ausführe wenn der tooltip eingeblendet ist.
      Dadurch ist die Fehlermeldung fast ^^ nichtmehr in meiner Konsole ^^

      ^^^^

      Das ist aber keine Lösung. Eine, die den Namen verdient, würde zu folgender Aussage führen:

      »Dadurch kommt keine Fehlermeldung mehr«.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?