heinerle: Problem bei Funktionsaufruf (IE & Firefox)

Hallo Gemeinde,

ich versuche eine Funktion zu schreiben, die die Hintergrundfarbe ene Listenelementes bei onclick() ändert. Das ganze funktioniert bei Firefox, aber der Internetexplorer 7.xx weigert sich, die Funktion aufzurufen.
Das Listenelement sieht so aus:

<li id="about"><a href="#" onclick="setActive('about', menu)">Leistungen</a></li>

Habe ich hier einen Denkfehler? Eigentlich muss onclick() doch mit jedem aktuellen browser funktionieren, oder?
Könnte mir jemand erklären, wo mein Fehler liegt?

thx
heinerle

  1. Hi,

    ich versuche eine Funktion zu schreiben, die die Hintergrundfarbe ene Listenelementes bei onclick() ändert.

    Und warum zeigst du uns den Code dieser Funktion nicht?

    Das ganze funktioniert bei Firefox, aber der Internetexplorer 7.xx weigert sich, die Funktion aufzurufen.

    Fehlermeldungen?

    <li id="about"><a href="#" onclick="setActive('about', menu)">Leistungen</a></li>

    Was ist menu?

    Habe ich hier einen Denkfehler? Eigentlich muss onclick() doch mit jedem aktuellen browser funktionieren, oder?
    Könnte mir jemand erklären, wo mein Fehler liegt?

    Wo dein Fehler bei diesem Posting liegt, erklaert dir </hilfe/charta.htm#tipps-fuer-fragende>

    MfG ChrisB

    1. zur Erklärung folgendes:

      Warum ich den Code nicht gezeigt habe?
      Weil der meiner Meinung nach nix mit dem Problem zu tun hat.
      Code der Funtkion:
      function setActive(dname, parElement) {
      alert('Funktion wird gerufen');
      for(var i=0; i<parElement.length; i++) {
        //alert('Counter: ' + i + ' ' + dname + ' ' + parElement[i]);
        if (document.getElementById(parElement[i]) && document.getElementById(parElement[i]) == document.getElementById(dname)) {
          alert(parElement[i] + ' sollte aktiviert werden');
          document.getElementById(parElement[i]).className = 'activelink';
        } else if(document.getElementById(parElement[i]) && document.getElementById(parElement[i]).className == 'activelink') {
          alert(parElement[i] + ' ist aktiviert');
          document.getElementById(parElement[i]).className = '';
        }
      }

      Der Aufruf erfolgt so:
      <li id="about"><a href="#" onclick="setActive('about', menu)">Leistungen</a></li>

      menu ist so im head definiert:
      <script type="text/javascript">
      var menu = new Array('home','about','options','domains','opinion','impr');
      </script>

      Fehlermeldung im IE: KEINE
      Ich habe die alert() eingebaut um zu sehen, bis wohin die Funktion im IE ausgeführt wird, aber es erscheint nichtmal der erste alert().
      Dies würde bedeuten, dass die Funktion gar nicht erst gerufen wird im IE.
      Unter Firefox wird alles normal ausgeführt. Alle alert() erscheinen und auch das Element wird verändert.
      Das Problem muss also im Aufruf der Funktion liegen und nicht in der Funktion selbst.

      Aus diesem Grund hatte ich auch den Code der Funktion nicht gepostet.

      1. Ich habe die alert() eingebaut um zu sehen, bis wohin die Funktion im IE ausgeführt wird, aber es erscheint nichtmal der erste alert().

        Weil setActive eine reservierte JScript-Methode ist.

        Dies würde bedeuten, dass die Funktion gar nicht erst gerufen wird im IE.

        Doch, wird sie, aber nicht so, wie Du es gerne hättest. Ändere den Funktionsnamen, dann sollte es funktionieren.

        Siechfred

        --
        Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
        1. Ich habe die alert() eingebaut um zu sehen, bis wohin die Funktion im IE ausgeführt wird, aber es erscheint nichtmal der erste alert().

          Weil setActive eine reservierte JScript-Methode ist.

          Dies würde bedeuten, dass die Funktion gar nicht erst gerufen wird im IE.

          Doch, wird sie, aber nicht so, wie Du es gerne hättest. Ändere den Funktionsnamen, dann sollte es funktionieren.

          Siechfred

          Danke, das wars.
          Heisst also, wenn ich das richtig gelesen habe, dass ich mal wieder daran gescheitert bin, dass eine gewisse Firma aus Redmond mal wieder ihr eigenes Süppchen kocht.
          Überall wo ich getestet hatte lief es (Opera, Firefox, Konqueror), dummerweise muss man aber immer noch damit kalkulieren, dass es noch Leute gibt, die InternetExplorer benutzen.

          In keinem meiner Bücher stand dieser Funktionsname als "reserviert" und ich wollte eben einen "sprechenden" Funktionsnamen verwenden :(

          Danke Siechfred, wieder was dazugelernt und nen guten Link gesammelt

          heinerle

          1. Hi,

            Heisst also, wenn ich das richtig gelesen habe, dass ich mal wieder daran gescheitert bin, dass eine gewisse Firma aus Redmond mal wieder ihr eigenes Süppchen kocht.

            Jepp. [1]
            Und schwer, die Ursache in so einem Fall zu finden - insb., wenn die schon vorhandene Funktion/Methode nicht mal etwas tut, was sich leicht optisch bemerkbar macht.

            Ein "cannot redeclare function xy", wie man es bspw. aus PHP kennt, kann es in Javascript natuerlich sprachbedingt nicht geben - es ist ja eine fundamentale Eigenschaft von Javascript, das Funktionsnamen eben auch nur Referenzen, und damit ueberschreibbar sind.

            In keinem meiner Bücher stand dieser Funktionsname als "reserviert" und ich wollte eben einen "sprechenden" Funktionsnamen verwenden :(

            Die MSDN sollte man in solchen Faellen oefter mal zu Rate ziehen - nur auf die Idee muss man halt erst mal kommen. War ja auch nicht das erste, was mir einfiel ...

            Wenn man nicht gerade auf Funktionsnamen in Deutsch, Kisuaheli oder sonstwas ausweichen moechte - dann sollte man sich vielleicht angewoehnen, eigene Funktionen immer mit einem Grossbuchstaben zu beginnen. Den eigenen Krempel benennen sie im MS-JScript naemlich soweit ich das jetzt aus dem Gedaechtnis ueberschaue meist (immer?) mit einem Kleinbuchstaben.

            MfG ChrisB

            [1] Mein liebster Klassiker ist ja immer noch, dass ein Element mit id="xyz" im IE automatisch ein Javascript=Objekt namens xyz im globalen Scope erzeugt - und man dann mit einer reichlich sinnfreien Fehlermeldung auf die Nase faellt, wenn man zwischen seinen HTML-IDs und Javascript-Bezeichnern konsistent bleiben will, und sich im Script mit
            var xyz = document.getElementById("xyz");
            eine Referenz darauf zu holen versucht ... (Ich glaube, die Fehlermeldung ist "das Objekt unterstuetzt diese Eigenschaft oder Methode nicht". Aha, Danke.)

      2. Hi,

        Das Problem muss also im Aufruf der Funktion liegen und nicht in der Funktion selbst.

        Ich vermute, das Problem liegt im Funktionsnamen - im IE gibt es naemlich bereits eine Methode setActive, u.a. auch am window-Objekt.

        MfG ChrisB