Hier meine Lösung für die Allgemeinheit. Vielleicht nicht JavaScript-Guru-Supercode, aber es funktioniert:
läßt sich natürlich schwer kontrollieren. Aber ich frag mich warum du es so umständlich machen willst. Du kannst doch jedesmal die anzeige neu berechnen, das sollte mit heutigen Computer in akzeptabler Geschwindigkeit ablaufen.
Meine Umsetzung würde ungefähr so aussehen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
<script type="text/javascript">
function count_status()
{
var status = document.getElementsByName('status')
var sum = {};
// Alle Werte auf 0 setzen
var el;
for(var i = 0; el = status[0].options[i++];)
{
var val = el.value || el.text;
sum[val] = 0;
}
// alle Listen checken
for(var i = 0; el = status[i++];)
{
var val = el.options[el.selectedIndex].value || el.options[el.selectedIndex].text;
sum[val]++;
}
// und ausgeben
for(var feld in sum)
{
var out = document.getElementById(feld);
out.firstChild.data = sum[feld];
}
}
window.onload = function()
{
var status = document.getElementsByName('status')
for(var i = 0; i < status.length; i++) status[i].onchange = count_status;
count_status();
}
</script>
</head>
<body>
<form action="#">
<p>
x: <strong id="x">0</strong> y: <strong id="y">0</strong> z: <strong id="z">0</strong>
</p>
<table>
<tr>
<td> Zeile 1 </td> <td>
<select name="status">
<option>x </option> <option>y </option> <option>z </option>
</select>
</td>
</tr>
<tr>
<td> Zeile 2 </td> <td>
<select name="status">
<option>x </option> <option>y </option> <option>z </option>
</select>
</td>
</tr>
<tr>
<td> Zeile 3 </td> <td>
<select name="status">
<option>x </option> <option>y </option> <option>z </option>
</select>
</td>
</tr>
<tr>
<td> Zeile 4 </td>
<td>
<select name="status">
<option>x </option> <option>y </option> <option>z </option>
</select>
</td>
</tr>
</table>
</form>
</body></html>
Struppi.
--
Javascript ist toll (Perl auch!)
Javascript ist toll (Perl auch!)