Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno změna css vlastnosti

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.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny