chris: mehrerer id´s bei getElementById

Hallo zusammen. Ich habe mir auf einer internetseite folgenden code runtergeladen:

<script type="text/javascript">  
timerID = null;  
  
function ScrollUp(speed){  
     if(document.getElementById){  
         if(parseInt(txt.style.top) < 0){  
          txt.style.top = parseInt(txt.style.top) + speed + "px";  
  }  
         timerID = setTimeout("ScrollUp("+speed+")",30)  
     }  
}  
  
function ScrollDown(speed){  
     if(document.getElementById){  
         if(parseInt(txt.style.top) > cnt.offsetHeight - txt.offsetHeight){  
          txt.style.top = parseInt(txt.style.top) - speed + "px";  
  }  
         timerID = setTimeout("ScrollDown("+speed+")",30)  
     }  
}  
  
function ScrollStop(){  
     if(document.getElementById){  
         clearTimeout(timerID);  
     }  
}  
  
function ScrollInit() {  
    if (document.getElementById) {  
         cnt = document.getElementById("contnewmenu");  
         txt = document.getElementById("textnewmenu");  
         txt.style.top = 0;  
     }  
}  
  
  
</script>

Und dann kann ich bei einem div-element und id diese funktion nutzen. Nun möchte ich aber mehrere div elemente damit ausstatten, ohne das immer das erste div-element angesprochen wird. Bekomme  das irgendwie nicht hin. (In der funktion wird ja nur eine id bestimmt. Wie kann ich dort sagen, das eine bestimmte gruppe von id´s, evtl. mit irgendeinem präfix, diese funktion nutzen können ohne sich zu stören?)

Ich hoffe ihr könnt mir helfen! Danke

  1. Hi,

    im Prinzip ist das ja nur diese Funktion hier, wenn ich das richtig sehe.

    function ScrollInit() {
        if (document.getElementById) {
             cnt = document.getElementById("contnewmenu");
             txt = document.getElementById("textnewmenu");
             txt.style.top = 0;
         }
    }

    Nun ja, wie der Code schon zeigt ist die ID nichts anderes als ein String, demnach kann man auch sämtliche String-Operationen etc. damit anstellen.
    Vorschlag:
    Gib der Funktion die ID einfach als Parameter mit, entweder komplett oder das Präfix oder was auch immer dir am geeignetsten erscheint.
    function ScrollInit(fullid) + document.getElementById(fullid)
    function ScrollInit(idPrefix) + document.getElementById(idPrefix+"contnewmenu")/document.getElementById(idPrefix+"textnewmenu")

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. Nun ja, wie der Code schon zeigt ist die ID nichts anderes als ein String, demnach kann man auch sämtliche String-Operationen etc. damit anstellen.
      Vorschlag:
      Gib der Funktion die ID einfach als Parameter mit, entweder komplett oder das Präfix oder was auch immer dir am geeignetsten erscheint.
      function ScrollInit(fullid) + document.getElementById(fullid)
      function ScrollInit(idPrefix) + document.getElementById(idPrefix+"contnewmenu")/document.getElementById(idPrefix+"textnewmenu")

      MfG
      Rouven

      Verstehe ich das jetzt richtig das die Funktion jetzt so heißen muss (wenn der Prefix newmenu heißt):

      function ScrollInit(newmenu) + document.getElementById(newmenu+"contnewmenu")/document.getElementById(newmenu+"textnewmenu")

      ???

      Und dann im div-element die id="newmenucontentmenu" bzw. id="newmenutextentmenu"

      oder verstehe ich das falsch?

      PS: im body wird ja auch noch der aufruf gestartet:

      onload="ScrollInit()

      Was musst dort dann stehen=

      Danke schonmal für deine hilfe!

      1. function ScrollInit(newmenu)

        Das würde ich nicht newmenu nennen, sondern tatsächlich prefix oder irgendwas, weil es in keinem Zusammenhang zum spätere Wert steht.

        Und dann im div-element die id="newmenucontentmenu" bzw. id="newmenutextentmenu"

        jup.

        PS: im body wird ja auch noch der aufruf gestartet:
        onload="ScrollInit()

        Da müsste dann ein Aufruf pro Div hin, mit dem jeweiligen Prefix, also
        onload="ScrollInit('newmenu'); ScrollInit('anderesmenu')"

        Nun hängt's allerdings davon ab, was dieses JavaScript noch so tut, nicht dass die Divs da am Ende die anderen Funktionen nicht finden... Kommt auf einen Versuch an.

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. Nun hängt's allerdings davon ab, was dieses JavaScript noch so tut, nicht dass die Divs da am Ende die anderen Funktionen nicht finden... Kommt auf einen Versuch an.

          ...ach ja, und du musst mal gucken wie das so mit dieser timerID aussieht, kann sein, dass man die auch etwas aufbohren muss damit die sich nicht in die Quere kommen, aber dazu müsste man mal etwas mehr über den Einsatz des Skriptes wissen.

          MfG
          Rouven

          --
          -------------------
          ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        2. function ScrollInit(newmenu)
          Das würde ich nicht newmenu nennen, sondern tatsächlich prefix oder irgendwas, weil es in keinem Zusammenhang zum spätere Wert steht.

          ok

          Also sieht es jetzt so aus:

          function ScrollInit(prefix) + document.getElementById(prefix+"contnewmenu")/document.getElementById(prefix+"textnewmenu") {
              if (document.getElementById) {
                   cnt = document.getElementById("contnewmenu");
                   txt = document.getElementById("textnewmenu");
                   txt.style.top = 0;
               }

          Aber das funktioniert nicht?!

          PS: im body wird ja auch noch der aufruf gestartet:
          onload="ScrollInit()
          Da müsste dann ein Aufruf pro Div hin, mit dem jeweiligen Prefix, also
          onload="ScrollInit('newmenu'); ScrollInit('anderesmenu')"

          Kann man dort nicht auch die Gruppe angeben? Weil das ist im php-kit und da müsste man dann jedes mal, wenn man ein neues div-element einfügt, die seite aufrufen und ändern wo der body-tag ist.

          danke

          1. function ScrollInit(prefix) + document.getElementById(prefix+"contnewmenu")/document.getElementById(prefix+"textnewmenu") {
                if (document.getElementById) {
                     cnt = document.getElementById("contnewmenu");
                     txt = document.getElementById("textnewmenu");
                     txt.style.top = 0;
                 }

            Nene, das hast du jetzt völlig in den falschen Hals bekommen.
            function ScrollInit(prefix) {
                      cnt = document.getElementById(prefix+"contnewmenu");
                      txt = document.getElementById(prefix+"textnewmenu");
                      txt.style.top = 0;
            }

            Wegen PHP-Kit: Was verstehst du unter eine Gruppe?? Du könntest die Funktion ScrollInit auch so umbauen, dass sie alle deine Divs auf einen Schlag initialisiert, wie gesagt, ich hab keine Ahnung was du mit dem ganzen eigentlich bezwecken willst...

            Auf einen Schlag initialisieren wäre sowas wie:
            function ScrollInit() {
               prefixes = new Array("newmenu", "anothermenu");

            for (i = 0; i < prefixes.length; i++) {
                      cnt = document.getElementById(prefixes[i]+"contnewmenu");
                      txt = document.getElementById(prefixes[i]+"textnewmenu");
                      txt.style.top = 0;
               }
            }

            MfG
            Rouven

            --
            -------------------
            ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
            1. Nene, das hast du jetzt völlig in den falschen Hals bekommen.
              function ScrollInit(prefix) {
                        cnt = document.getElementById(prefix+"contnewmenu");
                        txt = document.getElementById(prefix+"textnewmenu");
                        txt.style.top = 0;
              }

              Achsoooooooo! Aber trotzdem funktioniert es nicht?!
              Aufruf im body-tag ist nun
              onload="ScrollInit('heid');ScrollInit('hallo');"

              Wobei nun die div-tags jeweils

              hallocontnewmenu
              hallotextnewmenu  bzw.

              heidcontnewmenu
              heidtextnewmenu heißen.

              Wegen PHP-Kit: Was verstehst du unter eine Gruppe?? Du könntest die Funktion ScrollInit auch so umbauen, dass sie alle deine Divs auf einen Schlag initialisiert, wie gesagt, ich hab keine Ahnung was du mit dem ganzen eigentlich bezwecken willst...

              Auf einen Schlag initialisieren wäre sowas wie:
              function ScrollInit() {
                 prefixes = new Array("newmenu", "anothermenu");

              for (i = 0; i < prefixes.length; i++) {
                        cnt = document.getElementById(prefixes[i]+"contnewmenu");
                        txt = document.getElementById(prefixes[i]+"textnewmenu");
                        txt.style.top = 0;
                 }
              }

              Naja, im php-kit kann man doch news verfassen wo man aber nur news eintragen kann und nicht den ganzen code vom javascript. Den kann man in einer site.html eintragen, die immer verwendet wird. Wo nur der inhalt des body sich ändert. So in etwa.

              und wenn man nun im php-kit news verfasst stehen die ja untereinander:

              News1
              News2
              usw...

              und da ist es mist, wenn man nur mit einer id arbeiten kann.

              jetzt müsste man dem aufruf sagen, dass er bei allen ids mit contnewmenu und textnewmenu mit den dazugehörigen prefixen, die funktion ausführt.

              1. Achsoooooooo! Aber trotzdem funktioniert es nicht?!

                du möchtest mir auch gerade noch sagen was das heißt, tut es nichts, gibts einen Fehler, ...?

                MfG
                Rouven

                --
                -------------------
                ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                1. Achsoooooooo! Aber trotzdem funktioniert es nicht?!
                  du möchtest mir auch gerade noch sagen was das heißt, tut es nichts, gibts einen Fehler, ...?

                  MfG
                  Rouven

                  Also folgendes: Das ist hier das original-script:

                  http://getelementbyid.com/scripts/index.aspx?CodeID=9

                  und dort auf demo. Es wird ein text (bei mir sollen es die news sein) gescrollt wenn man auf die Pfeile geht.

                  Meine Funktion sieht nun so aus:

                  function ScrollInit(prefix) {
                      if (document.getElementById) {
                            cnt = document.getElementById(prefix+"contnewmenu");
                            txt = document.getElementById(prefix+"textnewmenu");
                            txt.style.top = 0;
                  }
                  }

                  Und der aufruf im body-tag:

                  onload="ScrollInit('heid');ScrollInit('hallo');"

                  Und in den div-elementen:

                  heidcontnewmenu, heidtextnewmenu
                  bzw.
                  hallocontnewmenu, hallotextnewmenu

                  Es gibt aber keine Fehlermeldung wie du hier sehen kannst (ausser, das das menü nicht scrollt)
                  www.energiefans.de

                  Danke nochmal

                  1. hi,

                    Also folgendes: Das ist hier das original-script:

                    http://getelementbyid.com/scripts/index.aspx?CodeID=9

                    Wirf es bitte weg, Danke.

                    (Nachdem ich per alert darauf hingewiesen werde, dass das Script für IE5+ und alle Gecko-basierten Browser "optimiert" wäre, wird mein Opera 8.54 auf about:blank(!) umgeleitet.
                    Solch ein Script ist nicht "optimiert", sondern "Scheiße". Der Inhalt ist überhaupt nicht mehr zugänglich.)

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                    1. Wirf es bitte weg, Danke.

                      (Nachdem ich per alert darauf hingewiesen werde, dass das Script für IE5+ und alle Gecko-basierten Browser "optimiert" wäre, wird mein Opera 8.54 auf about:blank(!) umgeleitet.
                      Solch ein Script ist nicht "optimiert", sondern "Scheiße". Der Inhalt ist überhaupt nicht mehr zugänglich.)

                      gruß,
                      wahsaga

                      Hi wahsaga, das ist natürlich mist.
                      Passiert das auch, wenn du auf meiner seite bist?
                      www.energiefans.de

                      Danke

                      1. hi,

                        Hi wahsaga, das ist natürlich mist.
                        Passiert das auch, wenn du auf meiner seite bist?
                        www.energiefans.de

                        Nein.
                        Aber auf dort hindert mich dieses blöde Script daran, beispielsweise mit dem Mausrad zu scrollen, und in der Geschwindigkeit, in der ich es mag.

                        Warum willst du die Nutzung deiner Seite extra erschweren, in dem du mich sie nicht mit den mir gewohnten Techniken nutzen lässt?

                        Dieses Script ist pure Spielerei (und Nerverei), es bietet keinerlei Mehrwert, es kann ersatzlos entfallen.

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
                  2. So nun geht es auf einmal doch, aber nicht unabhängig von einander. Also sie kommen sich doch in die Quere. Siehe meine Seite.

                  3. Ahso,

                    jetzt wird mir die Sache allmählich klarer.
                    Also, die schnellste Variante das Problem zu lösen ist folgende:

                    1. Schmeiß aus der ScrollInit die Zeile mit dem "cnt = ..." raus.
                    2. Setz in ScrollUp und ScrollDown jeweils in das if (document.getElementById) an den Anfang die "cnt = ..." und "txt = ..."-Zeilen rein.
                    3. Verpass ScrollUp und ScrollDown jeweils den zweiten Parameter prefix
                    4. Verändere in beiden die
                         timerID = setTimeout("ScrollUp("+speed+")",30)
                         zu
                         timerID = setTimeout("ScrollUp("+speed+", '"+prefix+"')",30)
                    5. Pass in dem Div bei diesen beiden Pfeil-Bildern im onmouseover den Funktionsaufruf von z.B. ScrollUp(5) zu ScrollUp(5, 'heid') an.

                    MfG
                    Rouven

                    --
                    -------------------
                    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                    1. Ahso,

                      jetzt wird mir die Sache allmählich klarer.
                      Also, die schnellste Variante das Problem zu lösen ist folgende:

                      1. Schmeiß aus der ScrollInit die Zeile mit dem "cnt = ..." raus.
                      2. Setz in ScrollUp und ScrollDown jeweils in das if (document.getElementById) an den Anfang die "cnt = ..." und "txt = ..."-Zeilen rein.
                      3. Verändere in beiden die
                           timerID = setTimeout("ScrollUp("+speed+")",30)
                           zu
                           timerID = setTimeout("ScrollUp("+speed+", '"+prefix+"')",30)

                      also meinst du so jetzt, ja? :

                      <script type="text/javascript">
                      timerID = null;

                      function ScrollUp(speed){
                           if(document.getElementById){
                                cnt = document.getElementById(prefix+"contnewmenu");
                                txt = document.getElementById(prefix+"textnewmenu");
                               if(parseInt(txt.style.top) < 0){
                                txt.style.top = parseInt(txt.style.top) + speed + "px";
                        }
                               timerID = setTimeout("ScrollUp("+speed+", '"+prefix+"')",30)
                           }
                      }

                      function ScrollDown(speed){
                           if(document.getElementById){
                                cnt = document.getElementById(prefix+"contnewmenu");
                                txt = document.getElementById(prefix+"textnewmenu");
                               if(parseInt(txt.style.top) > cnt.offsetHeight - txt.offsetHeight){
                                txt.style.top = parseInt(txt.style.top) - speed + "px";
                        }
                               timerID = setTimeout("ScrollUp("+speed+", '"+prefix+"')",30)
                           }
                      }

                      function ScrollStop(){
                           if(document.getElementById){
                               clearTimeout(timerID);
                           }
                      }

                      function ScrollInit(prefix) {
                          if (document.getElementById) {
                                txt.style.top = 0;
                      }
                      }

                      </script>

                      1. Verpass ScrollUp und ScrollDown jeweils den zweiten Parameter prefix
                      1. Pass in dem Div bei diesen beiden Pfeil-Bildern im onmouseover den Funktionsaufruf von z.B. ScrollUp(5) zu ScrollUp(5, 'heid') an.

                      Das verstehe ich nicht ganz. Kannst du das noch etwas erläutern?

                      Danke Dir

                      1. meine natürlich:

                        function ScrollDown(speed){
                              if(document.getElementById){
                                   cnt = document.getElementById(prefix+"contnewmenu");
                                   txt = document.getElementById(prefix+"textnewmenu");
                                  if(parseInt(txt.style.top) > cnt.offsetHeight - txt.offsetHeight){
                                   txt.style.top = parseInt(txt.style.top) - speed + "px";
                           }
                                  timerID = setTimeout("ScrollDown("+speed+", '"+prefix+"')",30)
                              }
                         }

                      1. Pass in dem Div bei diesen beiden Pfeil-Bildern im onmouseover den Funktionsaufruf von z.B. ScrollUp(5) zu ScrollUp(5, 'heid') an.

                      Hat sich erledigt, habe falsch gelesen!

                      Nur mit 3. weiß ich nicht so richtig was du meinst.

                      Danke schonmal.

                      PS: Und was wir vorhin schon angeschnitten haben, ob man dann nicht sagen kann, das der Aufruf alle id´s mit den werten contnewmenu und textnewmenu diese funktion ausführen lassen kann.

                      1. Hoi,

                        Nur mit 3. weiß ich nicht so richtig was du meinst.

                        ScrollUp respektive ScrollDown weiß nicht was prefix ist, daher musst du die Funktionsköpfe anpassen:
                        ScrollUp(speed, prefix) etc.

                        PS: Und was wir vorhin schon angeschnitten haben, ob man dann nicht sagen kann, das der Aufruf alle id´s mit den werten contnewmenu und textnewmenu diese funktion ausführen lassen kann.

                        Das käme mit dem "angepassten" System auf einen Versuch an. Versuch mal die ScrollInit komplett wegzulassen, damit kannst du dir das onload sparen. Der Rest müsste dann eigentlich (sofern die Divs nicht von sich aus mit einer komischen Position starten, was sie meiner Ansicht nach nicht sollten) von alleine klappen.

                        MfG
                        Rouven

                        --
                        -------------------
                        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                        1. Hoi,

                          Nur mit 3. weiß ich nicht so richtig was du meinst.
                          ScrollUp respektive ScrollDown weiß nicht was prefix ist, daher musst du die Funktionsköpfe anpassen:
                          ScrollUp(speed, prefix) etc.

                          So das habe ich nun auch hinbekommen. :o) Und jetzt sieht das script so aus (auch im head-tag habe ich das rausgenommen):

                          <script type="text/javascript">
                          timerID = null;

                          function ScrollUp(speed, prefix){
                               if(document.getElementById){
                                    cnt = document.getElementById(prefix+"contnewmenu");
                                    txt = document.getElementById(prefix+"textnewmenu");
                                   if(parseInt(txt.style.top) < 0){
                                    txt.style.top = parseInt(txt.style.top) + speed + "px";
                            }
                                   timerID = setTimeout("ScrollUp("+speed+", '"+prefix+"')",30)
                               }
                          }

                          function ScrollDown(speed, prefix){
                               if(document.getElementById){
                                    cnt = document.getElementById(prefix+"contnewmenu");
                                    txt = document.getElementById(prefix+"textnewmenu");
                                   if(parseInt(txt.style.top) > cnt.offsetHeight - txt.offsetHeight){
                                    txt.style.top = parseInt(txt.style.top) - speed + "px";
                            }
                                   timerID = setTimeout("ScrollDown("+speed+", '"+prefix+"')",30)
                               }
                          }

                          function ScrollStop(){
                               if(document.getElementById){
                                   clearTimeout(timerID);
                               }
                          }

                          function ScrollInit(prefix) {
                              if (document.getElementById) {
                                    txt.style.top = 0;
                          }
                          }

                          </script>

                          Es funktioniert aber nur bei einem div-element das es dort scrollt, das andere bleibt stumm!

                          PS: Und was wir vorhin schon angeschnitten haben, ob man dann nicht sagen kann, das der Aufruf alle id´s mit den werten contnewmenu und textnewmenu diese funktion ausführen lassen kann.
                          Das käme mit dem "angepassten" System auf einen Versuch an. Versuch mal die ScrollInit komplett wegzulassen, damit kannst du dir das onload sparen. Der Rest müsste dann eigentlich (sofern die Divs nicht von sich aus mit einer komischen Position starten, was sie meiner Ansicht nach nicht sollten) von alleine klappen.

                          wenn ich jetzt diesen Teil rausnehme:

                          function ScrollInit(prefix) {
                              if (document.getElementById) {
                                    txt.style.top = 0;
                          }
                          }

                          geht auch nur eins.

                          danke für deine ausdauer!

                          1. Ich nehme alles zurück! Der Fehler satz, wie so oft, zwischen Monitor und Rückenlehne!

                            Habe bei dem einen Beitrag vergessen prefix bei scrollup und scrolldown vergessen!

                            Nun funktioniert es super! So wie ich es wollte!

                            Ich danke Dir nochmals recht herzlich!

                            Gruß Chris

                          2. Hallöchen,

                            wie rufst du denn jetzt - ach warte, ich gucks nach...

                            ähm, hmpf, gerade gings nicht, jetzt klappts?!

                            MfG
                            Rouven

                            --
                            -------------------
                            ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                            1. Hallöchen,

                              wie rufst du denn jetzt - ach warte, ich gucks nach...

                              ähm, hmpf, gerade gings nicht, jetzt klappts?!

                              MfG
                              Rouven

                              Hi danke, klappt jetzt alles! War mein Fehler. Hatte schon zwei minuten vor dir gepostet! Hast du wahrscheinlich nicht mehr gesehen.

                              Danke!!