Peter: Script läuft unter 'Chrome & FF' aber nich mit 'Opera & IE'

Guten Morgen

im folgenden ist ein Javascript dargestellt, welches bei einem Menü für das Stehenbleiben des RolloverEffekts nach dem Klick auf einen der Menüpunkte sorgen soll.

Hab das Script ohne großartige Kenntnisse über Javascript aus einer Vorlage umgeschrieben, die statt Textfarben Grafiken verwendet. Wie die Überschrift besagt funktioniert das bei Cr & FF super. Op & IE führen 'mouse_over' aus. 'mouse_out' wird immer ausgeführt auch bei Nichterfüllung der If-Bedingung. Dafür bleibt der komplette 'click'-Block scheinbar unbeachtet.

  
  
// Variable initialisieren  
  
var geclickt;  
  
// beim Überfahren  
  
function mouse_over(loc) //Übergeben wird die id des Elements  
{  
   loc.style.color='rgb(81,0,29)';  
}  
  
// beim Verlassen  
  
function mouse_out(loc)  
{  
   if (geclickt != loc) { loc.style.color='rgb(10,80,0)'; }  
}  //wird immer ausgeführt under Op und IE  
  
// beim Klicken  
  
function click(loc,anz)  //Übergeben wird zusätzlich die Anzahl der vorhandenen Links  
{  
  
// Rücksetzen der Farben  
  
Link1.style.color = 'rgb(10,80,161)';   //Wird nie ausgeführt unter Op und IE  
if(anz > 1) { Link2.style.color = 'rgb(10,80,161)'; }  
if(anz > 2) { Link3.style.color = 'rgb(10,80,161)'; }  
if(anz > 3) { Link4.style.color = 'rgb(10,80,161)'; }  
if(anz > 4) { Link5.style.color = 'rgb(10,80,161)'; }  
if(anz > 5) { Link6.style.color = 'rgb(10,80,161)'; }  
  
geclickt = loc;  
loc.style.color='rgb(81,170,29)';  
  
}  

Der Aufruf erfolgt folgendermaßen:

  
<a href="../Content/Filialen.php" target="Inhalt" id="Link1" onMouseOver="mouse_over(Link1);" onMouseOut="mouse_out(Link1);" onClick="click(Link1,3);">-Filialen</a>  

Ist das Script fehlerhaft oder liegt eventuell ein anderes Problem vor? Über schnelle Hilfe würde ich mich sehr freuen.
Danke
Peter

  1. Hallo,

    wenn es funktioniert... aber statt loc.style.... würde ich das element ordnunggemäß ansprechen:

    document.getElementById(loc).style...

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. Hallo Christoph,

      mein eigentliches Problem wurde durch den vorhergehenden Post bereits gelöst. Möchte nur kurz rückmelden, dass nach der Änderung aller

      loc.style...
      nach
      document.getElementById(loc).style...

      keines der Elemente mehr eine Veränderung erfuhr.

      Leider kann ich keine Erklärung abgeben warum das so sein könnte. Ich erwarte aber auch keine von dir (,
      Vielen Dank für deine Bemühungen!

      Róbert

      1. Hallo,

        Leider kann ich keine Erklärung abgeben warum das so sein könnte.

        Link1    // Namen, der aufgelöst wird und auf ein Objekt verweist (oder undefined ergibt, wenn im aktuellen Geltungsbereich kein entsprechend benanntes Objekt existiert)  
        "Link1"  // String mit einem Namen, den du document.getElementById als Parameter übergeben kannst
        

        document.getElementById(Link1) wäre Unsinn. Link1 verweist ja schon auf das Elementobjekt, wie ich in meinem anderen Posting zu erklären versucht habe.

        Mathias

        1. Hallo Mathias,

          danke dir für die kleine Einführung. Allein mit Hilfe deiner beiden Posts ist es mir gelungen das Script zum laufen zu bringen und dabei zu beachten, die Elemente ordnungsgemäß über ihre ID anzusprechen.

          Danke dir für deine Zeit.
          Mit freundlichen Grüßen
          Peter

  2. Lieber Peter,

    1.) Du möchtest keine Funktion "click" definieren, da dieses Wort http://de.selfhtml.org/javascript/objekte/all.htm#click@title=reseviert ist!

    2.) Deine Kommentare sind irreführend:

    function mouse_over(loc) //Übergeben wird die id des Elements
    {
       loc.style.color='rgb(81,0,29)';
    }

    Du meinst hier sicherlich, dass eine _Referenz_ auf das angeklickte Element übergeben wird, keinesfalls nur eine ID...

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Feix,

      es stimmt, eine Funktion 'click' möchte ich dann wohl wirklich nicht definieren. Auf dein Anraten hin habe ich die Funktion einfach umbenannt und siehe da, es funktioniert in allen 4 Browsern.

      Der irreführende Kommentar entspringt meinem grundlegenden Unwissen. Ich habe versucht in Worte zu fassen was ich nur halbwegs verstehe.

      Vielen Dank für die schnelle Hilfe und die höfliche Zurechtweisung!

      Róbert

      1. Hallo,

        Der irreführende Kommentar entspringt meinem grundlegenden Unwissen. Ich habe versucht in Worte zu fassen was ich nur halbwegs verstehe.

        Du solltest schon den Unterschied zwischen einer ID (in einem String) und einem Elementobjekt verstehen!

        Du vergibst einem Element eine ID und denkst dann, es existiere im JavaScript ebenfalls eine globale Variable mit diesem Namen, die auf das Element verweist.

        Das mögen alle Browser zulassen, was aber bloß daran liegt, dass sie zu einem zweifelhaften proprietären Feature des Internet Explorers kompatibel sein wollen. Der Firefox erlaubt es z.B. nur im Quirks-Modus, bei dem er sowieso fehlertolerant ist und die Webstandards nicht konsequent anwendet (vgl. Dokumenttyp-Weiche). Den Quirks-Mode sollte man i.d.R. nicht verwenden!

        Wenn du auf Elemente über eine ID zugreifen willst, dann verwende http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id@title=document.getElementById.

        Mathias