seb: for-function-bindings

Hi,
folgendes Problem, ich habe eine for-schleife, in der wiederum
werden unterschiedliche Events durchlaufen, nun möchte ich
zusätzlich dass das "i" von der for-schleife zugleich mit
dem gerade jeweiligen Event mitgeliefert wird, dass es
innerhalb des Events bekannt ist.

z.B. i=0 durch die for-schleife, 0 soll nun auch innerhalb
my_span_tags[i].onmouseover = function(e) bekannt sein.
Wie kann ich das realisieren?

Ein Codebeispiel:

  
    var my_span_tags = document.getElementById('test_null').getElementsByTagName('span');  
  
    for(i=0; i<my_images.length; i++)  
    {  
        my_span_tags[i].onmouseover = function(e)  
        {  
            alert(i);  
        }  
    }  

Merci schon mal, Seb

  1. Hi,

    my_span_tags[i].i=i;
             my_span_tags[i].onmouseover = function(e)
             {
                 alert(this.i);
             }

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Wie kann ich das realisieren?

    Mir fallen zwei Möglichkeiten ein.

    Entweder du gibst dem Objekt die Variabel als Eigenschaft mit: my_span_tags[i]['i'] = i oder du erzeugst die Funktion mit new Function (o.ä.)

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Wie kann ich das realisieren?

      Mir fallen zwei Möglichkeiten ein.

      Entweder du gibst dem Objekt die Variabel als Eigenschaft mit: my_span_tags[i]['i'] = i oder du erzeugst die Funktion mit new Function (o.ä.)

      Struppi.

      Danke euch beiden, die erste Möglichkeit krieg ich hin,
      allerdings das mit new Function nicht, wie müsste ich
      das anstellen?

      Habs folgendermassen probiert:
      myFunc = new Function(i);
      test1[i].onmouseover=myFunc()
      {
        alert(this.i);
      }

      hierbei wird jedoch die Ausgabe sofort gemacht,
      ohne dass ein Mouseover geschieht, is also etwas
      falsch bei mir.

      Gruß, Seb

      1. Danke euch beiden, die erste Möglichkeit krieg ich hin,
        allerdings das mit new Function nicht, wie müsste ich
        das anstellen?

        Schau dir nochmal das Kapitel in selfhtml an, wie man eine Funktion mit new Function erstellt.

        myFunc = new Function(i);

        hier hast du eine Referenz auf deine Funktion.

        test1[i].onmouseover=myFunc()

        und hier rufst du sie auf, wenn müßtest du myFunc ohne Klammer schreiben. allerdings bin ich mir nicht sicher ob dein Konstrukt so funktioniert.

        {
          alert(this.i);
        }

        dieser Block wird dann wahrscheinlich einfach ausgeführt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. sry, habe auch schon var myFunc = new Function(i) probiert,
          ebenso auch test1[i].onmouseover=myFunc und er ruft
          trotzdem alles gleich auf, wie meintest du die
          Lösung bezüglich new Function? Wenn alles gleich aufgerufen
          wird?

          mfg darki

          Danke euch beiden, die erste Möglichkeit krieg ich hin,
          allerdings das mit new Function nicht, wie müsste ich
          das anstellen?

          Schau dir nochmal das Kapitel in selfhtml an, wie man eine Funktion mit new Function erstellt.

          myFunc = new Function(i);

          hier hast du eine Referenz auf deine Funktion.

          test1[i].onmouseover=myFunc()

          und hier rufst du sie auf, wenn müßtest du myFunc ohne Klammer schreiben. allerdings bin ich mir nicht sicher ob dein Konstrukt so funktioniert.

          {
            alert(this.i);
          }

          dieser Block wird dann wahrscheinlich einfach ausgeführt.

          Struppi.

          1. Bitte keine TOFU.

            sry, habe auch schon var myFunc = new Function(i) probiert,

            und das Kapitel in http://[link:http://de.selfhtml.org/javascript/objekte/function.htm@title=selfhtml] gelesen?

            ebenso auch test1[i].onmouseover=myFunc und er ruft
            trotzdem alles gleich auf, ....

            Das glaube ich nicht.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Kannst du gerne Testen, aber er ruft es wirklich sofort :(
              auf, (und ja ich hab es mir durchgelesen)
              hier der nahezug komplette code:

                
               <div id="test_null">  
                <span>123</span>  
                <span>456</span>  
                <span>789</span>  
               </div>  
                
              <script type="text/javascript">  
               var test1 = document.getElementsByTagName('span');  
                
               for(i=0;i<test1.length;i++)  
               {  
                var myFunc = new Function(i);  
                test1[i].onmouseover=myFunc  
                {  
                 alert(i);  
                }  
               }  
              </script>  
              
              
              1. Kannst du gerne Testen, aber er ruft es wirklich sofort :(

                weil du immer noch den unnötigen Block mit dem alert drin hast, der wird aufgerufen, aber nicht die Funktion.

                auf, (und ja ich hab es mir durchgelesen)

                Dann verstehe ich nciht, wie du darauf kommst:

                var myFunc = new Function(i);

                test1[i].onmouseover=myFunc

                Hier weist du dem Event das Objekt zu, dem der Funktionskörper fehlt.

                {
                   alert(i);
                  }

                und hier rufst du alert(i) auf.

                Struppi.

                --
                Javascript ist toll (Perl auch!)