Thomas Dose: Argumente übergeben, onclick

Hallo!

Mit einer javascript-Funktion "TabelleFuellen()" (siehe unten) erzeuge ich eine Tabelle.
Mit "onclick" soll beim Anklicken bestimmter Textstellen in der fertigen Tabelle eine Funktion "Test(x)" aufgerufen werden (hier der Einfachheit halber die Anzeige der Zeilennummer).
Diese Funktion soll als Argument die Zeilennummer enthalten, damit je nach Zeile eine unterschiedliche Reaktion erfolgen kann.
Wenn ich das wie unten programmiere, wird aber für alle Zeilen immer der Wert der letzten Zeile angegeben (Hier für alle Zeilen also die "8")!

Wer hat eine Idee, wie man es schafft, dass tatsächlich die Zeilennummer übergeben wird?

function TabelleFuellen() {
...
for (i=0; i < 9; i++)    // Auswahltabelle fuellen
 {
 var TDneu04 = this.document.createElement("td");
 TDneu04.setAttribute("id", ZellennameNeu_04);
 var Pneu04 = this.document.createElement("p");

Pneu04.onclick = function(){Test(i)};

var Pneu04text = this.document.createTextNode(Unterschrift[i]);
 Pneu04.appendChild(Pneu04text);
 TDneu04.appendChild(Pneu04);
 if (navigator.appName=='Microsoft Internet Explorer')
 {Pneu04.style.cursor='hand'}
 else {Pneu04.style.cursor='pointer'};
 }
...
}

function Test(x) {alert(x);}    // Test()

  1. Hi,

    Pneu04.onclick = function(){Test(i)};

    Du koenntest mit einem Array arbeiten, dessen keys td-ids sind, und dessen values Deine Nummern ethalten:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
    <html>
    <head>
    <script type="text/javascript">
    var cnt =  new Array(); // hilfsarray
    function doit() {
        for (var i = 0; i < 9; i++) {
            txt =  document.createTextNode(i);
            td  =  document.createElement("td");
            td.appendChild(txt);
            td.id =  "td_" + i; // td id erzeugen
            cnt["td_" + i] = i; // td id als key benutzen
            td.onclick=function() {
                alert(cnt[this.id]);
            }
            document.getElementById("tr").appendChild(td);
        }
    }
    </script>
    </head>
    <body onload="doit()">
    <table>
        <tbody>
            <tr id="tr">
            </tr>
        </tbody>
    </table>
    </body>
    </html>

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Hallo,

    Pneu04.onclick = function(){Test(i)};

    Zum Beispiel
    Pneu04.onclick = new Function("Test(" + i + ");");
    oder
    Pneu04.i = i; und this.id in der Funktion Test. Also den Wert einfach als Unterobjekt an den Elementknoten hängen.

    Mathias

    1. Hi,

      Pneu04.i = i; und this.id in der Funktion Test. Also den Wert einfach als Unterobjekt an den Elementknoten hängen.

      hmm, gelten da nicht auch die Regeln, nachdem die Benamung mit _ oder Buchstabe beginnen, nicht aber lediglich eine Number sein sollte... bin nicht sicher?

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. Hallo,

        Pneu04.i = i; und this.id in der Funktion Test. Also den Wert einfach als Unterobjekt an den Elementknoten hängen.
        hmm, gelten da nicht auch die Regeln, nachdem die Benamung mit _ oder Buchstabe beginnen, nicht aber lediglich eine Number sein sollte... bin nicht sicher?

        Der Name des Objekts, das an den Elemenknoten angehängt wird, ist »i«, lediglich der Wert ist vom Typ Number. Das ist erlaubt.

        Ich meinte übrigens »this.i in der Funktion Test«, nicht »id«.

        Mathias

        1. Hi Mathias,

          Der Name des Objekts, das an den Elemenknoten angehängt wird, ist »i«, lediglich der Wert ist vom Typ Number. Das ist erlaubt.

          hab ich schlampig gelesen, ich geh ins Bett...

          Nacht, Joachim

          --
          Am Ende wird alles gut.
    2. Hallo Mathias!

      Pneu04.onclick = new Function("Test(" + i + ");");

      Funktioniert super!

      Danke

      Thomas