Problem mit Javascript bei Dynamischer Tabelle

Walterlein

Grünschnabel
Moin,
langsam hab ich das Gefühl das ich zu doof für meinen Job bin. Ich hab eine Tabelle die über einen Button um je eine Zeile ergänzt werden kann. Ich zähle immer einen hoch in der Variable um diese als ID für die Zeile zu verwenden. Variable heißt "trid", es wir einen hochgezählt und wenn ich erneut auf hinzufügen klicke zählt er von der gleichen stelle hoch. Also bekomm ich egal wieviele Reihen immer die ID 3.
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <title></title>
  <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
  <script type="text/javascript">
    trid = 2;
    function addRow(id,trid)
    {
    alert(trid);
    trid = trid+1;
    alert(trid);
    
    var tbody = document.getElementById(id).getElementsByTagName("TBODY")[0];
    var row = document.createElement("TR")
    //tb.appendChild(newTr);
    
	trid_neu = "zeile"+trid;

	//tr bekommt id
	tbody.appendChild(row).setAttribute("id", trid_neu, 0);
    
    var td1 = document.createElement("TD")
    td1.appendChild (document.createTextNode(""+trid))
    
    var td2 = document.createElement("TD")
    td2.innerHTML = "<td><input name='vorname' type='text' size='20' maxlength='30'></td>";
    
    var td3 = document.createElement("TD")
    td3.innerHTML = "<td><input name='vorname' type='text' size='20' maxlength='30'></td>";
	
	var td4 = document.createElement("TD")
    td4.innerHTML = "<td><input name='vorname' type='text' size='10' maxlength='4'></td>";
	
	var td5 = document.createElement("TD")
    td5.innerHTML = "<td><input name='vorname' type='text' size='5' maxlength='1'></td>";
	
	var td6 = document.createElement("TD")
    td6.innerHTML = "<td><input name='vorname' type='text' size='20' maxlength='30'></td>";
	
    var td7 = document.createElement("TD")
    
    //zu loeschende trid in diesem fall die erstelle zeile tr
    //trid = "tr#zeile"+trid;
    alert(trid);
    
    //td3.innerHTML = "<a href=\"#\" onclick=\"loeschen('"+trid+"')\">loeschen</a>";
        
    row.appendChild(td1);
    row.appendChild(td2);
    row.appendChild(td3);
	row.appendChild(td4);
	row.appendChild(td5);
	row.appendChild(td6);
	row.appendChild(td7);
    tbody.appendChild(row);
    }
    
    //letzte tabellen zeile
    
  </script>
  </head>
  <body>
    <table id="test" width="98%">
    <tbody>
    <tr>
    <th>Nr.</th>
    <th>Name</th>
    <th>Vorname</th>
    <th>Jahrgang</th>
    <th>m/w</th>
    <th>Verein/Ort</th>
    </tr>
    <tr id="zeile1">
    <td>1</td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    <td><input name="vorname" type="text" size="10" maxlength="4"></td>
    <td><input name="vorname" type="text" size="5" maxlength="1"></td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    </tr>
    <tr id="zeile2">
    <td>2</td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    <td><input name="vorname" type="text" size="10" maxlength="4"></td>
    <td><input name="vorname" type="text" size="5" maxlength="1"></td>
    <td><input name="vorname" type="text" size="20" maxlength="30"></td>
    </tr>
    </tbody>
    </table>
    <a href="#" onclick="addRow('test',trid)"><img src="http://www.tutorials.de/administrator/components/com_chronoforms/images/increment.png" width="20" height="20" border="0" alt="Home"></a>
  </body>
</html>

Ich hoff mir kann jemand weiterhelfen, seit einer Stunde versuch ich ne Lösung zu finden.
Gruß Walterlein
 
Ganz einfach. Du hast zwei Variablen namens "trid" und verdeckst dir mit der inneren (der Parameter) die äußere.
 
Öh ja aber ich deklariere ja die 1. ganz oben und übergebe dann unten auf dem Add-Row Link diese Variable in die Funktion, dort zähl ich dann hoch. Oder falsch verstanden? Ich arbeite sonst mit C#, deshalb steh ich da bisschen aufm schlauch^^
 
Ist in C# genauso. Beispiel

C#:
using System;

class Program {
	private static int trid = 0;
	
	static void AddRow(int trid) {
		trid++;
		trid++;
		trid++;
		trid++;
		trid++;
	}
	
	static void Main(string[] argv) {
		Console.WriteLine(trid);
		AddRow(trid);
		Console.WriteLine(trid);
	}
}

Gibt zwei mal 0 aus! Stichwort Gültigkeitsbereich http://msdn.microsoft.com/de-de/library/aa691132(v=vs.71).aspx

Lass den Parameter einfach weg, die Variable ist doch ohnehin überall verfügbar.
 
Zurück