erntedank: Funktion mit Rückgabewert und getElementbyId

Hallo!

Ich habe folgende Funktion und komme nicht weiter wie ich dieser als Rückgabewert die ID des Links aus dem sie aufgerufen wird, übergebe.

var linkfarbe = new Array("#FFF", "#EEE", "#CCC", "#666", "#000");
var counter = 0;
function hoverlinks() {
 if(counter > linkfarbe.length) {
 counter = 0;
 return;
 }
 if(document.getElementById)
 document.getElementById('blink').style.color = linkfarbe[counter];
 counter++;
 setTimeout('hoverlinks()', 60);
}

<a href="#" id="blink" onmouseover="hoverlinks()">blabla</a>

Wenn ich eine Stringvariable vereinbare und diese Variable als Rückgabewert einsetze, kommt stets als Fehlermeldung document.getElementById(Variable) has no properties.

Wie muss ich diese Funktion umschreiben?
Vielen Dank!

  1. Moin!

    Ich sehe auf den ersten Blick keinen Fehler. Existiert das Element 'blink' denn schon, wenn die Funktion ausgeführt wird?

    Im Zweifelsfall würde ich gern das komplette Skript + HTML sehen. Kannst Du das irgendwo online stellen?

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Ich sehe auf den ersten Blick keinen Fehler. Existiert das Element 'blink' denn schon, wenn die Funktion ausgeführt wird?

      Ja. Es existiert auch in der jetzt vorliegenden Version kein Fehler.

      Das Problem ist, dass ich nicht weiß wie man eine Rückgabewertsfunktion definiert mit document.getElementById.

      Wenn ich im Aufruf die ID reinpacke (onmouseover="hoverlinks('blink');"), wie müsste die Funktion umformuliert werden. Denn ich will das nicht auf einen Link beschränken, sondern X Links über deren IDs per Übergabe ansprechen.

      Danke!

      1. Moin!

        var linkfarbe = new Array("#FFF", "#EEE", "#CCC", "#666", "#000");
        var linkfarben = linkfarbe.length;
        var counter = 0;

        function hoverlinks(myElement) {
         if(counter > linkfarben) {
           counter = 0;
           return;
         }
         if(document.getElementById(myElement)) {
            document.getElementById(myElement).style.color = linkfarbe[counter];
            counter++;
            myFunc="hoverlinks('" + myElement + "')";
            setTimeout(myFunc, 60);
         }
        }

        <a href="#" id="blink" onmouseover="hoverlinks('blink1')">blabla</a>
        <a href="#" id="blink" onmouseover="hoverlinks('blink2')">blabla</a>

        Sollte es tun (ungetestet).

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Hi,

          <a href="#" id="blink" onmouseover="hoverlinks('blink1')">blabla</a>
          <a href="#" id="blink" onmouseover="hoverlinks('blink2')">blabla</a>

          nana... solltest Du hier nicht eine Klasse verwenden? ;-)

          freundliche Grüße
          Ingo

          1. Moin!

            <a href="#" id="blink" onmouseover="hoverlinks('blink1')">blabla</a>
            <a href="#" id="blink" onmouseover="hoverlinks('blink2')">blabla</a>

            nana... solltest Du hier nicht eine Klasse verwenden? ;-)

            Nein, das nicht, wohl aber eine eigene ID:
            <a href="#" id="blink1" onmouseover="hoverlinks('blink1')">blabla</a>
            <a href="#" id="blink2" onmouseover="hoverlinks('blink2')">blabla</a>

            Das ist der halt der SELFige Charakter der Antwort gewesen...

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        2. Getest und arbeitet einwandfrei... Dankeschön!

          Ich hab' jetzt noch vier Verständnisfragen:
          1. Wozu die Variablenvereinbarung linkfarben - zur besseren Lesbarkeit?
          2. myFunc wird deswegen integriert, damit das setTimeout weiter funktioniert?!?
          3. Weshalb ist bei der zweiten if-Anweisung in der Bedingung auch das myElement? Ich hab' bevor ich das Problem hier ins Forum gestellt habe, selbst herumprobiert und dabei stets (document.getElementById()) als Bedingung gestellt. Ich dachte, das reicht aus?
          4. Vor längerem hörte ich einmal dass Arrays nicht die beste Lösung sind, was die Performance angeht, gäbe es da noch eine andere Möglichkeit?

          var linkfarbe = new Array("#FFF", "#EEE", "#CCC", "#666", "#000");
          var linkfarben = linkfarbe.length;
          var counter = 0;

          function hoverlinks(myElement) {
          if(counter > linkfarben) {
             counter = 0;
             return;
          }
          if(document.getElementById(myElement)) {
              document.getElementById(myElement).style.color = linkfarbe[counter];
              counter++;
              myFunc="hoverlinks('" + myElement + "')";
              setTimeout(myFunc, 60);
          }
          }

          <a href="#" id="blink" onmouseover="hoverlinks('blink1')">blabla</a>
          <a href="#" id="blink" onmouseover="hoverlinks('blink2')">blabla</a>

          1. Moin!

            1. Wozu die Variablenvereinbarung linkfarben - zur besseren Lesbarkeit?

            Jein. Verbessert auch minimal die Performance. So zähle ich die Elemente nur einmal. Naja. Bei der gewaltigen Anzahl der Elemente des Array nicht wirklich... Sagen wir: eine Sache der persönlichen Preferenz.

            1. myFunc wird deswegen integriert, damit das setTimeout weiter funktioniert?!?

            Genau.

            1. Weshalb ist bei der zweiten if-Anweisung in der Bedingung auch das myElement? Ich hab' bevor ich das Problem hier ins Forum gestellt habe, selbst herumprobiert und dabei stets (document.getElementById()) als Bedingung gestellt. Ich dachte, das reicht aus?

            Mag sein. Aber so finde ich sogar heraus, ob es _das_ Element auch gibt.

            1. Vor längerem hörte ich einmal dass Arrays nicht die beste Lösung sind, was die Performance angeht, gäbe es da noch eine andere Möglichkeit?

            Dein hat Array wieviele Elemente? Was soll da die Performance in den Keller treiben?
            Arrays sind gelegentlich zu empfehlen, manchmal eine gute Idee, oft unumgänglich. Es macht viel Sinn hier was anderes zu probieren. Wenn Du JS dafür einsetzt, wofür es gedacht ist, dann hast Du keine so gewaltigen Arrays, als daß es Performanceprobleme geben könnte. Zumal: Wie Javascript implementiert ist, ist von Browserhersteller zu Browserhersteller verschieden. Das betrifft auch die Arrays...

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
            1. Hallo nochmal!

              Danke für die Beantwortungen, sehr informativ.

              1. Vor längerem hörte ich einmal dass Arrays nicht die beste Lösung sind, was die Performance angeht, gäbe es da noch eine andere Möglichkeit?
                Es macht viel Sinn hier was anderes zu probieren.

              Ich bin dem SELFGedanken verpflichtet, doch sind meine JS-Kenntnisse beschränkt, würdest Du mich mit der Nase auf eine andere Möglichkeit stoßen. Ich mach' mir nämlich keinen Reim darauf, wodurch das Array hier ersetzt werden kann.

              knad, kand, dank.

              1. Moin!

                Es macht viel Sinn hier was anderes zu probieren.

                Ah... Es macht _NICHT_ viel Sinn hier was anderes zu probieren.

                Ich bin dem SELFGedanken verpflichtet, doch sind meine JS-Kenntnisse beschränkt, würdest Du mich mit der Nase auf eine andere Möglichkeit stoßen. Ich mach' mir nämlich keinen Reim darauf, wodurch das Array hier ersetzt werden kann.

                Hier macht _nur_ ein Array Sinn. Alles andere ist "Quatsch mit Sose[tm]".

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix®

                --
                Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hi,

    was meinst Du mit "Rückgabe"wert, bzw. was für einen Sinn soll das ergeben?

    Timeout ist problematisch, wenn Argumente übergeben werden sollen. Deine Funktion ruft sich selbst auf, wobei Du beim setTimeout dann natürlich auch die Argumente wieder mitgeben mußt... Wenn Du die Argumente vor dem ersten Aufruf in einer globalen Variablen zwischenspeicherst, solltest Du weniger Probleme damit haben...

    Gruß
    Danny