Lord Palpatine: Funktionspointer

Hallo,
Ich bräuchte eine Funktion, mit der ein Funktionsaufruf mit variablen Funktionsnamen möglich ist.

Zur Erläuterung:

function init(){
  svgdok=evt.getTarget().getOwnerDocument();
  for (i=1; i <= 3; i++){
     elem=svgdok.getElementById("B03M"+i);
     elem.addEventListener("click",'Funktionsname_' + i,false)
  }
}

In der letzten Zeile ('Funktionsname_' + i) soll nun die jeweilige Funktion aufgerufen werden.

Kann mir bitte wer weiterhelfen ?

thx.

  1. Ich bräuchte eine Funktion, mit der ein Funktionsaufruf mit variablen Funktionsnamen möglich ist.

    Vielleicht hilft dir das weiter:
    --------------------------------
    <script type="text/javascript" language="JavaScript">
    <!--
     function Funktionsname_1(){alert(1)}
     function Funktionsname_2(){alert(2)}
     function Funktionsname_3(){alert(3)}
     function Funktionsaufruf()
      {
       for(i = 1; i <= 3; i++){eval("Funktionsname_" + i + "()")}
      }
     Funktionsaufruf();
    //-->
    </script>

    Gruß
    Norbert

    1. Ich bräuchte eine Funktion, mit der ein Funktionsaufruf mit variablen Funktionsnamen möglich ist.

      Vielleicht hilft dir das weiter:

      <script type="text/javascript" language="JavaScript">
      <!--
      function Funktionsname_1(){alert(1)}
      function Funktionsname_2(){alert(2)}
      function Funktionsname_3(){alert(3)}
      function Funktionsaufruf()
        {
         for(i = 1; i <= 3; i++){eval("Funktionsname_" + i + "()")}
        }
      Funktionsaufruf();
      //-->
      </script>

      Gruß
      Norbert

      Leider nein, da eval die Funktionen ausführt.
      Meine init()-Funktion führt nur eine "Anhängen"-Funktion (addEventListener --> SVG-Code) aus.
      D.h. einem Element wird so eine Art Event-Watchdog angehängt, welche aufpasst, falls ein Mausclick auf dieses Element erfolgt --> danach wird diese zugeordnete Funktion ausgeführt.

      Ich bräuchte so was wie:

      function init(){
        svgdok=evt.getTarget().getOwnerDocument();

      var FunktionPlatzhalter = 'Funktionsname' + 1

      for (i=1; i <= 3; i++){
           elem=svgdok.getElementById("B03M"+i);
           elem.addEventListener("click",'FunktionPlatzhalter' + i,false)
        }
      }

      1. Moin!

        Leider nein, da eval die Funktionen ausführt.
        Meine init()-Funktion führt nur eine "Anhängen"-Funktion (addEventListener --> SVG-Code) aus.
        D.h. einem Element wird so eine Art Event-Watchdog angehängt, welche aufpasst, falls ein Mausclick auf dieses Element erfolgt --> danach wird diese zugeordnete Funktion ausgeführt.

        Ich hab keine Idee, was du meinen könntest, aber eval ist trotzdem dein Freund.

        Du kannst mit eval so ziemlich jeden Code ausführen, der auch im Javascript stehen kann. Du kannst sogar mit eval Funktionen definieren, indem du einfach den Funktionscode übergibst. eval ist ziemlich mächtig (und vermutlich deshalb von Natur aus böse ;) ).

        <script type="text/javascript">
        eval('function test(meldung){ alert(meldung); }');

        test('Es geht!');
        </script>

        - Sven Rautenberg

      2. Hi there!

        Leider nein, da eval die Funktionen ausführt.

        Nun, im Ausgangsposting schriebst Du, dass Du genau das willst. Wenn Du eine Funktion nicht aufrufen willst, sondern eine Referenz darauf, dann lass einfach die Klammern weg. Also
          eval("Funktionsname_" + i)

        So long

        1. Hi there!

          Leider nein, da eval die Funktionen ausführt.

          Nun, im Ausgangsposting schriebst Du, dass Du genau das willst. Wenn Du eine Funktion nicht aufrufen willst, sondern eine Referenz darauf, dann lass einfach die Klammern weg. Also
            eval("Funktionsname_" + i)

          So long

          Yeahhhhh !!!

          So funktioniert's.
          Thx a lot.

  2. Hallo,
    Ich bräuchte eine Funktion, mit der ein Funktionsaufruf mit variablen Funktionsnamen möglich ist.

    Zur Erläuterung:

    function init(){
      svgdok=evt.getTarget().getOwnerDocument();
      for (i=1; i <= 3; i++){
         elem=svgdok.getElementById("B03M"+i);
         elem.addEventListener("click",'Funktionsname_' + i,false)
      }
    }

    In der letzten Zeile ('Funktionsname_' + i) soll nun die jeweilige Funktion aufgerufen werden.

    Kann mir bitte wer weiterhelfen ?

    thx.

    Hallo,
    Ich glaube das Problem ist, daß für jedes Element eine eigene Funktion aufgerufen werden soll, oder eben eine Funktion mit Parameter, was meines Wissens nicht möglich ist. Man kann aber in der Funktion selbst auf die id des betreffenden Elements zugreifen, was eigentlich ausreichend ist, weil man danach weiter verzweigen kann:

    function init(){
       svgdok=evt.getTarget().getOwnerDocument();
       for (i=1; i <= 3; i++){
          elem=svgdok.getElementById("B03M"+i);
          elem.addEventListener("click",'Clicked',false)
       }
     }

    function Clicked()
    { var id=this.id;
      if (id=="B03M1") TueDies();
      if (id=="B03M2") TueDas();
      if (id=="B03M3") TueJenes();
    }

    Gruß, Lutz