Blub123: doOver(); doOut(); doClick()

Hi,

Ich habe ein Problem mit den Methoden doOver(), doOut() und doClick().
Und zwar funktionieren diese im IE wunderbar nur im ff nicht.

var ie5 = document.getElementById != null;
function doOver() {
 var el = window.event.srcElement;
 bgc = el.style.backgroundColor;

if (bgc != "") {
  el.style.borderTopColor = "white";
  el.style.borderLeftColor = "white";
  el.style.borderRightColor = "black";
  el.style.borderBottomColor = "black";

colorBox.style.backgroundColor = bgc;
  colorName.innerHTML = bgc;
 }
}
function doClick() {
 bgc = window.event.srcElement.style.backgroundColor;
 window.event.srcElement.style.borderColor = bgc;
 if (bgc != "") {
  document.Formular.farbe.value=bgc;
  window.href = top.Formular.submit();
 }
}
function doOut() {
 var el = window.event.fromElement;
 bgc = el.style.backgroundColor;

if (bgc != "") {
  el.style.borderColor = bgc;
 }
}

Diese Methoden brauche ich für einen Farbwähler, der diese so aufruft:
echo "<table cellspacing="0" cellpadding="0" onmouseover="doOver()" onmouseout="doOut()" onclick="doClick()" style="width: 260;">";

Das Problem ist, wenn ich im Farbwähler im ff auf die einzelnen Farben gehe passiert nichts. Im IE allerdings funktioniert alles, das heißt ich kann die farben auswählen und anklicken usw..

Kann mir einer sagen warum es im ff nicht geht? Ich brauch unbedingt eine Lösung, dass es in beiden Explorer geht.

  1. Hi,

    Und zwar funktionieren diese im IE wunderbar nur im ff nicht.

    falsch. Richtig wäre: Sie funktionieren nur im IE, sonst nicht.

    var ie5 = document.getElementById != null;

    Merkwürdiger Variablenname für eine Prüfung, ob DOM bekannt ist.

    var el = window.event.srcElement;

    window.event ist eine Microsoft-Erfindung. Konforme Browser übergeben ein Event-Objekt an die Funktion. Auch der Inhalt des Objektes ist bei Microsoft anders als vorgesehen.

    window.href = top.Formular.submit();

    Ähm, diese Zeile ist sehr, sehr merkwürdig. Oder hast Du tatsächlich im obersten Fenster (welcher *hoffentlich* mangels Frameset mit dem aktuellen Fenster identisch ist) ein Objekt namens "Formular" erzeugt, welches eine submit()-Methode besitzt, die eine URL zurückliefert?

    echo "<table cellspacing="0" cellpadding="0" onmouseover="doOver()" onmouseout="doOut()" onclick="doClick()" style="width: 260;">";

    1.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
    2.) Eliminiere cellspacing und cellpadding. Darstellungsbezogene Attribute haben in HTML nichts verloren.
    3.) "260" ist kein gültiger Wert für die width-Eigenschaft.
    4.) Verwende keine Inline-Styles.
    5.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
    6.) Verlasse den Quirks-Mode. Dringend.
    7.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.

    Kann mir einer sagen warum es im ff nicht geht? Ich brauch unbedingt eine Lösung, dass es in beiden Explorer geht.

    Beide Explorer? Du meinst den Internet Explorer und den Windows-Explorer? Ansonsten gibt es IIRC noch ein FTP-Programm dieses Namens, aber das wird keine HTML-Dokumente rendern.

    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. Hi,

      var el = window.event.srcElement;

      window.event ist eine Microsoft-Erfindung. Konforme Browser übergeben ein Event-Objekt an die Funktion. Auch der Inhalt des Objektes ist bei Microsoft anders als vorgesehen.

      window.event funktioniert bei meinem Programm aber sonst auch im ff.

      window.href = top.Formular.submit();

      Ähm, diese Zeile ist sehr, sehr merkwürdig. Oder hast Du tatsächlich im obersten Fenster (welcher *hoffentlich* mangels Frameset mit dem aktuellen Fenster identisch ist) ein Objekt namens "Formular" erzeugt, welches eine submit()-Methode besitzt, die eine URL zurückliefert?

      Ja das habe ich. Ich wollte nicht das ganze Programm posten!!!

      echo "<table cellspacing="0" cellpadding="0" onmouseover="doOver()" onmouseout="doOut()" onclick="doClick()" style="width: 260;">";

      1.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
      2.) Eliminiere cellspacing und cellpadding. Darstellungsbezogene Attribute haben in HTML nichts verloren.
      3.) "260" ist kein gültiger Wert für die width-Eigenschaft.
      4.) Verwende keine Inline-Styles.
      5.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
      6.) Verlasse den Quirks-Mode. Dringend.
      7.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.

      Das hat ja nichts mit meinem Problem zu tun. Außerdem ist 260 ein gültiger Wert!!!

      Kann mir einer sagen warum es im ff nicht geht? Ich brauch unbedingt eine Lösung, dass es in beiden Browser geht.

      Ich meinte natürlich Browser sorry!

      1. var el = window.event.srcElement;

        window.event ist eine Microsoft-Erfindung. Konforme Browser übergeben ein Event-Objekt an die Funktion. Auch der Inhalt des Objektes ist bei Microsoft anders als vorgesehen.

        window.event funktioniert bei meinem Programm aber sonst auch im ff.

        Wohl kaum.

        window.href = top.Formular.submit();

        Ähm, diese Zeile ist sehr, sehr merkwürdig. Oder hast Du tatsächlich im obersten Fenster (welcher *hoffentlich* mangels Frameset mit dem aktuellen Fenster identisch ist) ein Objekt namens "Formular" erzeugt, welches eine submit()-Methode besitzt, die eine URL zurückliefert?

        Ja das habe ich. Ich wollte nicht das ganze Programm posten!!!

        Die obige Zeile sieht aber eher so aus, als ob du die submit Funktion eines Formulares aufrufst und diese gibt keine URL zurück.

        Das hat ja nichts mit meinem Problem zu tun. Außerdem ist 260 ein gültiger Wert!!!

        Nein ist es nicht.

        Struppi.

        1. Ich habe mein Problem jetzt selber lösen können. Eure Antworten haben mir leider nicht weiter gaholen aaber trotzdem DANKE!!!!!!

          Für alle die dasselbe Problem wie haben:

          Vor dem Aufruf der Funktionen hat einfach ein javascript: gefehlt.
          Nun funktioniert es im FF und IE!!!

          1. Vor dem Aufruf der Funktionen hat einfach ein javascript: gefehlt.

            Das ist Quatsch, das Label ist völlig unnötig und z.T. führt es sogar zu einer Fehlermeldung (OK, im Netscape, den benutzt eh keiner mehr)

            Struppi.

          2. Mahlzeit Blub123,

            Ich habe mein Problem jetzt selber lösen können.

            Das ist schön.

            Eure Antworten haben mir leider nicht weiter gaholen

            Das ist schade.

            aaber trotzdem DANKE!!!!!!

            Das ist nett.

            Für alle die dasselbe Problem wie haben:

            Das ist interessant.

            Vor dem Aufruf der Funktionen hat einfach ein javascript: gefehlt.

            Das ist falsch. (*)

            Nun funktioniert es im FF und IE!!!

            Das ist Glück.

            MfG,
            EKKi

            (*) "javascript:" in einem Eventhandler zu notieren ist so überflüssig wie ein dritter Kropf. Die Ursache für Dein Problem ist eine ganz andere und wurde in diesem Thread mehrfach erläutert: dein Code ist 1. invalide und 2. nur für den IE "optimiert". Nutze Standardfunktionen und gültige DOM-Objekte sowie deren Methoden, dann klappt es auch mit richtigen Browsern. Alles andere ist keine Ursachenbehebung, sondern reine Glückssache ...

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. window.event funktioniert bei meinem Programm aber sonst auch im ff.

        Beispiel?

        Das hat ja nichts mit meinem Problem zu tun. Außerdem ist 260 ein gültiger Wert!!!

        Nicht für die width-Eigenschaft.

        --
        Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
        Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
      3. Mahlzeit Blubb123,

        1.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
        2.) Eliminiere cellspacing und cellpadding. Darstellungsbezogene Attribute haben in HTML nichts verloren.
        3.) "260" ist kein gültiger Wert für die width-Eigenschaft.
        4.) Verwende keine Inline-Styles.
        5.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.
        6.) Verlasse den Quirks-Mode. Dringend.
        7.) Eliminiere bei clientseitigen Problemen *immer* jedweden serverseitigen Code.

        Das hat ja nichts mit meinem Problem zu tun.

        Doch.

        Außerdem ist 260 ein gültiger Wert!!!

        Nein. Jedenfalls nicht für die CSS-Eigenschaft "http://de.selfhtml.org/css/eigenschaften/positionierung.htm#width@title=width" ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      4. Hi,

        3.) "260" ist kein gültiger Wert für die width-Eigenschaft.

        Das hat ja nichts mit meinem Problem zu tun. Außerdem ist 260 ein gültiger Wert!!!

        Wenn du schon auf einen Fehler hingewiesen wirst - dann beharre bitte nicht auf ihm, sondern informiere dich, um deine Wissensluecke zu schliessen!

        Nein, 260 ist kein gueltiger Wert fuer die CSS-Eigenschaft width - weil in CSS *alle* Laengenangaben, sobald ihr Wert von 0 abweicht, die Angabe einer Einheit erfordern.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Nein, 260 ist kein gueltiger Wert fuer die CSS-Eigenschaft width - weil in CSS *alle* Laengenangaben, sobald ihr Wert von 0 abweicht, die Angabe einer Einheit erfordern.

          Da ich aber in meinem Programm css Dateien habe , die ich ein binde besitzt 260 eine Einheit!

          1. Mahlzeit Blub123,

            Da ich aber in meinem Programm css Dateien habe , die ich ein binde

            Was für ein Programm? Was "bindest" Du? Und wie kommst Du auf die Idee, dass Deine Leser hellsehen oder auf andere Art übersinnlich wahrnehmen können, was Du sonst noch alles so benutzt oder hast oder tust oder lässt, wenn Du keinerlei hilfreiche Information von Dir gibst?

            besitzt 260 eine Einheit!

            Bei der von Dir verwendeten Syntax

            <table [...] style="width: 260;">

            besitzt "260" keine Einheit. Alle dieser Tatsache widersprechenden Behauptungen von Dir sind schlicht und ergreifend unwahr.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Nur mal nebenbei ich poste hier doch nicht mein ganzes Programm!!! Du reitest auf einen teil rum, der mit meinem Problem überhaupt nichts zu tun hat.

              1. Mahlzeit Blub123,

                Nur mal nebenbei ich poste hier doch nicht mein ganzes Programm!!! Du reitest auf einen teil rum, der mit meinem Problem überhaupt nichts zu tun hat.

                Woher willst Du das wissen? "Ein bisschen valide" gibt es nicht - genauso wenig wie "ein bisschen schwanger". Und wenn ein Dokument nicht valide ist, ein "Browser" in den Quirksmodus gezwungen wird o.ä., dann sind die Konsequenzen dessen absolut nicht absehbar.

                Außerdem hat niemand verlangt, dass Du Dein ganzes "Programm" posten sollst - lediglich die relevanten Teile ... zumindest, wenn Du Hilfe möchtest: keine Arme - keine Kekse.

                Und dass Du potentiell wichtige Informationen (wie z.B. die Tatsache, dass noch weitere Stylesheets benutzt werden u.ä.) Deinen Lesern nicht vorenthalten solltest, wenn Du qualifizierte und zielführende Antworten erwartest, sollte Dir klar sein - denn schließlich hast Du bestätigt, die Charta des Forums gelesen zu haben.

                Und jetzt komm wieder runter und hilf uns, Dir zu helfen. Alternativ kannst Du es natürlich auch lassen.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Mahlzeit Blub123,

    Ich habe ein Problem mit den Methoden doOver(), doOut() und doClick().

    Das sind keine Methoden, sondern Funktionen.

    Und zwar funktionieren diese im IE wunderbar nur im ff nicht.

    Kein Wunder. Kleiner Tipp für's nächste Mal: HTML-Seiten und Javascript entwickelt man sinnvollerweise unter Zuhilfenahme eines vernünftigen Browsers - und passt das funktionierende Ergebnis erst ganz zum Schluss an die Befindlichkeiten des IE an.

    var ie5 = document.getElementById != null;

    Was soll diese Festlegung? Ich sehe keine Stelle, an der diese Variable benutzt wird. Abgesehen davon ist diese Art der "Fallunterscheidung" bzw. "Browser-Identifikation" ziemlicher Blödsinn.

    Kann mir einer sagen warum es im ff nicht geht? Ich brauch unbedingt eine Lösung, dass es in beiden Explorer geht.

    "Beide Explorer"? Du meinst "beide Browser"? Es liegt schlicht und ergreifend daran, dass der IE das DOM (und z.B. die Eigenschaft http://de.selfhtml.org/dhtml/modelle/dom.htm#event_handling@title=target) nicht (vollständig) unterstützt und lieber sein eigenes Süppchen bastelt.

    Weitere Informationen zum Thema liefert Dir die Forumsuche.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. var ie5 = document.getElementById != null;

    Wird nicht benutzt, wo ist der Sinn?

    function doOver() {
    var el = window.event.srcElement;

    Wieso überprüfst du weiter oben die Existenz von document.getElementById, aber hier nicht die Existenz von window.event und window.event.srcElement? Dann wäre dir nämlich aufgefallen, dass im Firefox window.event gar nicht existiert.

    bgc = el.style.backgroundColor;

    Hier wird dem globalen Objekt eine Eigenschaft zugewiesen, ganz schlechter Stil.

    if (bgc != "") {

    if (bgc) reicht aus, "" ist ein falsy value.

    el.style.borderTopColor = "white";
      el.style.borderLeftColor = "white";
      el.style.borderRightColor = "black";
      el.style.borderBottomColor = "black";

    Solche Angaben in den JavaScript-Code zu schreiben ist schlechter Stil. Besser ist es, sie in den CSS-Code zu stecken und per JavaScript lediglich die HTML-Struktur so abzuändern, dass unterschiedliche CSS-Selektoren greifen.

    colorBox.style.backgroundColor = bgc;
      colorName.innerHTML = bgc;

    Woher kommen colorBox und colorName? Du hast sie vorher nicht benutzt.

    Ich weiß gar nicht, wo ich anfangen soll. Schau bei http://de.selfhtml.org//javascript/objekte/event.htm nach, wie das mit den Events, vor allem mit der Übergabe des Event-Objekts funktioniert. Lies dir die Artikel zu Objektabfragen und zur Organisation von Scripts durch. Vermeide unbedingt globale Variablen!

    Diese Methoden brauche ich für einen Farbwähler, der diese so aufruft:
    echo "<table cellspacing="0" cellpadding="0" onmouseover="doOver()" onmouseout="doOut()" onclick="doClick()" style="width: 260;">";

    Das ist serverseitiger Code und daher irrelevant (oder es ist tatsächlich dein HTML-Code und somit zutiefst kaputt). Du hast nicht einmal angegeben, welche Sprache verwendet wird!
    Sollte der resultierende HTML-Code <table cellspacing="0" cellpadding="0" onmouseover="doOver()" onmouseout="doOut()" onclick="doClick()" style="width: 260;"> sein, so beachte, dass es besser ist, cellspacing und cellpadding in ein <http://de.selfhtml.org//css/formate/einbinden.htm#separat@title=externes Stylesheet> zu verlagern sowie Inline-http://de.selfhtml.org//css/formate/direkt.htm@title=Styles und -http://de.selfhtml.org//javascript/sprache/eventhandler.htm@title=Eventhandler zu vermeiden. Bei dem Wert zu width fehlt außerdem die http://de.selfhtml.org//css/formate/wertzuweisung.htm#numerische@title=Einheit.

    Das Problem ist, wenn ich im Farbwähler im ff auf die einzelnen Farben gehe passiert nichts. Im IE allerdings funktioniert alles, das heißt ich kann die farben auswählen und anklicken usw..

    Kann mir einer sagen warum es im ff nicht geht? Ich brauch unbedingt eine Lösung, dass es in beiden Explorer geht.

    Ja, du hast eine IE-only-Lösung produziert. Es geht also nicht bloß im Firefox nicht, sondern in diversen anderen Browsern ebenfalls nicht.

    --
    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
    Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|