Script läuft unter 'Chrome & FF' aber nich mit 'Opera & IE'
Peter
- javascript
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
Hallo,
wenn es funktioniert... aber statt loc.style.... würde ich das element ordnunggemäß ansprechen:
document.getElementById(loc).style...
MfG. Christoph
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
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
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
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.
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
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