Ja das war ein Vereinfachtes Beispiel. Im Beispiel greife ich ja -- so weit ich das verstehe -- nur auf den ersten Button im tr zu. In einem tr gibt es aber -- über verschiedene td verteilt -- bis zu 15 Buttons, die ich dann einzeln mit:
13 buttons[0].onclick = sendInfo.addGoal(id, 0);
14 buttons[1].onclick = sendInfo.delGoal(id, 0);
15 buttons[2].onclick = sendInfo.addGoal(id, 1);
16 buttons[3].onclick = sendInfo.delGoal(id, 1);
17 [und so weiter bis buttons[14] oder so]
Nein, das ist immer noch falsch, du rufst hier eine Funktion auf und weist den Rückgabewert immer noch dem Eventhandler zu.
Aber letztlich ist die Frage wozu du die ID überhaupt brauchst?
Was soll eigentlich dieser slice() bei der ID?
slice ist eine Funktion für ein Array und eigentlich sind Strings keine Arrays.
auch getAttribute ist in so einem Falle nicht zu empfehlen, da der IE damit immer mal wieder Schwierigkeiten hat und du ohne Problem auch direkt die id erhälst.
[code lang=javascript]function addBehaviour() {
var table = document.getElementsByTagName('table')[0];
var trs = table.getElementsByTagName('tr');for(var i=0; i < trs.length; i++) {
var tr = trs[i];
var id = tr.getAttribute('id').slice(1);
var buttons = tr.getElementsByTagName('button');var local = function() {
var sendInfo = new Action(id);
buttons[0].onclick = function() { sendInfo.addGoal('heim'); };
buttons[1].onclick = function() { sendInfo.delGoal('heim'); };
buttons[2].onclick = function() { sendInfo.addGoal('gast'); };
buttons[3].onclick = function() { sendInfo.delGoal('gast'); };
// und so weiter
};
local();
so ganz versteh ich nicht den Sinn, warum du hier eine anonyme Funktion erzeugst und dann unmittelbar aufrufst.
Letztlich wäre es hier interessant, was sendInfo und Action ist, wozu du die id brauchst usw.
Struppi.