Ten atribút onclick by vyzeral takto:
onclick="this.className='pozadi-black'"
resp. ak to chceš prehadzovať:onclick="this.className=this.className=='pozadi-white'?'pozadi-black':'pozadi-white'"
Ok, toľko k otázke, teraz k tomu, ako sa to robí lepšie: Ideálne je, keď je javascriptový kód oddelený od HTML podobne, ako je CSS kód oddelený od HTML. Čiže v elemente td by si sa mal zbaviť nielen atribútov width a height, ale aj onclick.Javascriptový kód zavesíš na elementy jednoducho tak, že v script elemente (ktorý je v zdrojovom HTML kóde umiestnený za elementom, na ktorý sa chceš zavesiť - aby bol ten element už dostupný), pridáš obsluhu nejako takto:
...
<td id="moja-bunka" class="pozadi-white">
...
<script>
document.getElementById('moja-bunka').onclick = function() {
this.className = this.className == 'pozadi-white' ? 'pozadi-black' : 'pozadi-white';
};
</script>
Keďže predpokladám, že chceš rovnako reagovať na klik na viacerých bunkách, tak najlepšie bude zavesiť sa na tabuľku, ktorá ich obsahuje:<table id="moja-tabulka">
...
</table>
<script>
var table = document.getElementById('moja-tabulka');
table.onclick = function(e) {
for (var el = e.target; el && el != table; el = el.parentNode)
if (el.tagName == 'TD' && el.className.indexOf('pozadi') != -1) {
el.className = el.className == 'pozadi-white' ? 'pozadi-black' : 'pozadi-white';
break;
}
}
</script>
Týmto spôsobom sa vyhneš zbytočnému pridávaniu obsluhy udalostí na N buniek, takže to bude rýchlejšie. Tento spôsob sa nazýva "event delegation".Ďalšia vec je, že pred volaním session_start by si nemal posielať nič na výstup do tela HTTP odpovede, pretože v rámci toho volania môže byť potrebné poslať nejaké HTTP hlavičky.