lousypoetry: Funktion mit removeAttribute() löschen?

Hallo!

Ich hab folgendes Problem: ich versuche eine Funktion zu basteln, die nach Möglichkeit eine Funktion aus meinem Quelltext löscht, ich versuch das mal zu erklären:

<td id="home" onmouseover="hover('home'); zeigen('e');">

beim Laden der Seite soll nun die Funktion "hover()" quasi aus dem <td>-Tag gelöscht werden, dazu hatte ich mir

document.getElementById("home").removeAttribute("onmouseover", "false");

überlegt. Jetzt wird natürlich die Funktion "zeigen()" auch gelöscht,
etwas wie

document.getElementById("home").removeAttribute("onmouseover", "hover('home')", "false")

funktioniert aber leider nicht, oder gibts da ne Möglichkeit? Hatte sonst nur noch die Idee, noch eine Funktion zu schreiben, die mit
"setAttribute" die Funktion "zeigen" wieder reinschreibt...

--
life's for the living. so check me tomorrow [Matthew Good Band]
  1. Hi,

    dann setz doch mit setAttribute ein neues Attribut, das nur den Aufruf von "zeigen" enthält.

    Gruß
    Roland

    1. Oups, vielleicht sollte ich die Postings doch mal ganz zu Ende lesen, Schande über mich!

      Nun gut, bist ja selbst auf die Lösung gekommen, aber wo ist das Problem dann? Die eine Zeile mit setAttribute ist doch wirklich nicht zu aufwendig, oder?

      Gruß
      Rols
      (Besserung gelobend:-)

      1. Die eine Zeile mit setAttribute ist doch wirklich nicht zu aufwendig, oder?

        Nee, das nicht, aber ich dachte, vielleicht gehts doch noch anders, aber dann werd ichs wohl so machen! :)

        --
        life's for the living. so check me tomorrow [Matthew Good Band]
        1. Nach Recherche im Archiv bin ich dazu übergegangen, removeAttribute zu lassen, weil der IE und Opera es in Bezug auf EventHandler wohl nicht erkennen, hab jetzt

          document.getElementById("home").onmouseover = null;

          als Lösung, wie kann ich aber den EventHandder wieder aktivieren, falls wer wieder verwendet werden soll?

          document.getElementById("home").onmouseover != null

          geht nicht (hatte ich auch sehr bezweifelt ;))

          --
          life's for the living. so check me tomorrow [Matthew Good Band]
          1. Hi!

            document.getElementById("home").onmouseover != null
            geht nicht (hatte ich auch sehr bezweifelt ;))

            != ist ein logischer Operator, kein Zuweisungsoperator. Das erinnert mich ein wenig an eine meiner ersten Programmzeilen vor ca. 20 Jahren. Um eine Schleife zu terminieren, hatte ich (sinngemäß) geschrieben "if i==i-1  break"; :-)

            Dem onmouseover kannst Du jede gültige Skriptsequenz (quotiert) zuweisen, in Deinem Fall z.B.:
            document.getElementById("home").onmouseover="zeigen('e');";

            Gruß
            Roland

            1. != ist ein logischer Operator, kein Zuweisungsoperator.

              Stimmt, hatte ich mir auch schon gedacht, dass das nicht funktioniert.

              Das erinnert mich ein wenig an eine meiner ersten Programmzeilen vor ca. 20 Jahren. Um eine Schleife zu terminieren, hatte ich (sinngemäß) geschrieben "if i==i-1  break"; :-)

              Gefällt mir! :-)

              Dem onmouseover kannst Du jede gültige Skriptsequenz (quotiert) zuweisen, in Deinem Fall z.B.:
              document.getElementById("home").onmouseover="zeigen('e');";

              Hab ich ausprobiert, geht aber leider nicht. Wenn die Funktion, in der die Zeile steht aufgerufen wird, tut sich im Browser absolut nichts, also auch keine Fehlermeldung. Woran könnte das denn liegen?

              --
              life's for the living. so check me tomorrow [Matthew Good Band]
              1. Hi,

                document.getElementById("home").onmouseover="zeigen('e');";

                Hab ich ausprobiert, geht aber leider nicht. Wenn die Funktion, in der die Zeile steht aufgerufen wird, tut sich im Browser absolut nichts, also auch keine Fehlermeldung. Woran könnte das denn liegen?

                habe ich zugegebenermaßen ungetestet gepostet, habe dergleichen aber schon mal selbst gehabt... kannst Du das mal online tellen oder einen etwas größeren Codeausschnitt posten?

                Gruß
                Roland

                1. kannst Du das mal online tellen oder einen etwas größeren Codeausschnitt posten?

                  <script language="JavaScript">
                  <!--
                   function test(name) // erzeugt einen Hover-Effekt
                   {
                     if(document.getElementById(name).style.backgroundColor != "green")
                       document.getElementById(name).style.backgroundColor = "green";
                     else
                       document.getElementById(name).style.backgroundColor = "white";
                   }

                  function anti_hover() // soll den Effekt entfernen
                   {
                     document.getElementById("home").onmouseover = null;
                     document.getElementById("home").onmouseout = null;
                   }

                  function hover_again() // soll den Effekt wieder ermöglichen
                   {

                  document.getElementById("home").onmouseover = "test('home');";
                     document.getElementById("home").onmouseout = "test('home)";;
                   }

                  //-->
                  </script>
                  </head>
                  <body text="#000000" bgcolor="#FFFFFF" onload="anti_hover();" onclick="hover_again();">
                  <table border="1" width="200px" id="tab">
                  <tr>
                   <td id="home" onmouseover="test('home');" onmouseout="test('home');">Home</td></tr>
                  <tr>
                   <td id="weiter" onmouseover="test('weiter');" onmouseout="test('weiter');">Weiter</td></tr>
                  </table>

                  Das ist es eigentlich, dient übrigens nur als Test-Script, also bitte nicht nach dem Sinn fragen ;-)

                  --
                  life's for the living. so check me tomorrow [Matthew Good Band]
                  1. document.getElementById("home").onmouseout = "test('home)";;

                    da hat sich ein kleiner Fehler eingeschlichen, muß  heißen:
                    document.getElementById("home").onmouseout = "test('home');";

                    Ist aber nicht das eigentliche Problem.

                    ob onclick im  body zulässig ist, weiß ich jetzt nicht, bei Opera geht es nicht, ich hab provisorisch ein
                    <div onMouseUp="hover_again();">Hover aktivieren</div>
                    eingefügt, und die Aktivierung zu testen.

                    Auch das war nicht das Hauptproblem.

                    Das hier ist interessant:

                    IE 6.0: geht nicht
                    Opera 7.22: geht
                    Netscape 7.1: geht nicht
                    Mozilla Firefox: geht, aber umgekehrt?

                    Als documenttype habe ich
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                    genommen.

                    Persönlich lasse ich bei solchen Inkompatibilitäten lieber die Finger davon und suche einen anderen Ansatz. Du möchtest ja anscheinend einen zunächst inaktiven Link durch eine Benutzeraktion wieder aktivieren, oder zumindest den hover-Effekt gezielt an/ausschalten, so daß der Link mal aktiv aussieht, mal nicht. Das sollte über CSS irgendwie einfacher gehen (in Kombination mit JS), aber ich nicht ganz genau, was Du warum erreichen willst.

                    Gruß
                    Roland

                    1. Persönlich lasse ich bei solchen Inkompatibilitäten lieber die Finger davon und suche einen anderen Ansatz. Du möchtest ja anscheinend einen zunächst inaktiven Link durch eine Benutzeraktion wieder aktivieren, oder zumindest den hover-Effekt gezielt an/ausschalten, so daß der Link mal aktiv aussieht, mal nicht. Das sollte über CSS irgendwie einfacher gehen (in Kombination mit JS), aber ich nicht ganz genau, was Du warum erreichen willst.

                      Okay, ich versuchs mal: ich verwende auf jeder Seite ein Navigationsmenü, wie zB

                      // ist das Menü
                      <table>
                      <tr>
                       <td onmouseover="hover();" onmouseout="hover();">Home</td></tr>
                      <tr>
                       <td onmouseover="hover();" onmouseout="hover();>Musik</td></tr>
                      <tr>
                       <td onmouseover="hover();" onmouseout="hover();>Spiele</td></tr>
                      </table>

                      Jede Kategorie wird beim Maus-drüber-bewegen andersfarbig hinterlegt. Jetzt befindet sich der Benutzer zB auf der Seite Musik, dann ist links am Bildschirm wieder das Menü angezeigt. Jetzt ist aber "Musik" farblich hervorgehoben, um noch mal zu zeigen, wo man sich befindet. Und jetzt kommt mein eigentliches anliegen: der Hover-Effekt soll nun bei "Musik" nicht mehr stattfinden. Dazu sind mir zwei Lösungen eingefallen:

                      1. Jede Seite bekommt ein geändertes Menü, Nachteil -> wenn mal was dazu kommt oder geändert wird, muss ichs überall ändern
                      2. ich entfern den Hover-Effekt

                      aber letzteres bringt halt die ganzen Schwierigkeiten mitsich, die man in diesem Thread lesen kann :)

                      Aber vielleicht fällt mir da ja noch was anderes ein, irgendwie ne If-Abfrage in dem Hover-Effekt ob er stattfinden soll oder nicht, ich probiers einfach mal! Danke für deine Hilfe!!
                      --
                      life's for the living. so check me tomorrow [Matthew Good Band]

                      1. Und jetzt kommt mein eigentliches anliegen: der Hover-Effekt soll nun bei "Musik" nicht mehr stattfinden.

                        Ah, verstehe. Dann schau noch mal in die Antwort von dragosan, der hat schneller geschnallt, was Du erreichen willst.
                        Prinzip: Das Script merkt sich in einer Variablen, welcher Punkt gerade nicht gehovert werden soll. Sehr gut bei der Lösung von dragosan ist, daß Du das onmouseover-Attribut gar nicht aus den Elementen entfernen bzw. wieder hinzufügen mußt, sondern daß die hover-Funktion immer aufgerufen wird, dann aber anhand des "Merkers" prüft, ob Sie für den aktuellen Link überhaupt hovern muß.

                        Gruß
                        Roland

                        1. jap, ich habs jetzt gelöst mit ner globalen variable, in der gespeichert wird, welche kategorie aktiv ist und somit nicht gehovert werden soll!

                          Danke!

                          --
                          life's for the living. so check me tomorrow [Matthew Good Band]
                          1. jap, ich habs jetzt gelöst mit ner globalen variable, in der gespeichert wird, welche kategorie aktiv ist und somit nicht gehovert werden soll!

                            Glückwunsch!

                            Danke!

                            forward => dragosan

                            Gruß
                            Rols

  2. Ich hab folgendes Problem: ich versuche eine Funktion zu basteln, die nach Möglichkeit eine Funktion aus meinem Quelltext löscht, ich versuch das mal zu erklären:

    <td id="home" onmouseover="hover('home'); zeigen('e');">

    beim Laden der Seite soll nun die Funktion "hover()" quasi aus dem <td>-Tag gelöscht werden, dazu hatte ich mir

    Ich nehme an, du hast mehrere solche Links, also würde ich das Ganze eher so lösen (wobei das 'e' würde ich durch die id ersetzen falls möglich):

    [...]
    <td id="home" onmouseover="hover(this); zeigen(this, 'e');">
    [...]
    <script type="text/javascript">

    var cur_id = 'home';

    function hover(object) {
      var id = object.id;

    if (id != cur_id) {
        // etwas tun
      }
    }

    function zeigen(object, name) {
      var id = object.id;

    if (id != cur_id) {
        cur_id = id;
        // etwas tun
      }
    }
    </script>