Autor Zpráva
SkyVessel
Profil
Zdravím,
opět mám jednu třešničku...

Mám nějaké data u uživatelů v databázi. Při výstupu si spočítám počet záznamů u každého uživatele a tento počet vypíšu dejme tomu do tabulky "počty".
Problém: na stránce mám v tabulce "data" nějaké údaje pro různé uživatele, které se po kliknutí označí (řešeno pomocí skrytých checkboxů a změně třídy javascriptem). Potřebuji, aby se mi vždy po kliknutí na nějakou buňku v tabulce "data" (zaškrtnutí checkboxu) v tabulce "počty" přičetlo +1 ke stávající hodnotě u daného uživatele.

Propojení může být asi podle id, ale prostě nevím, jak na to... Jestli vůbec lze vytáhnout takto hodnotu pomocí js z tabulky nebo spanu a dále s ní pracovat, nebo je to lepší (jediné řešení) po každém kliknutí nebo odkliknutí natáhnout daný záznam z databáze a provést update?!

Snad jsem se vyjádřil nějak pochopitelně :)
Str4wberry
Profil
Takhle?

Živá ukázka
SkyVessel
Profil
No... vypadá to dost dobře funkčně :). Když jsem se na to jen tak zběžně mrknul, tak bych neměl mít problém udělat to přímo na kliknutí na tech checkbox a zároveň i odečtení hodnoty při odznačení.

Díky moc. Jak přijdu z práce, tak na to mrknu a zkusím to implementovat do toho mojeho šíleného kódu. Dám vědět, jak jsem blbej/dobrej xD
SkyVessel
Profil
No tak asi jsem krypl... Ten javascript mi prostě nejde...
Mám tabulku asi takto (mohl jsem to tu hodit hned sry)
<table>
    <tr><td onclick='oznac(this)' class='cas'>Novotný Dan<input type='checkbox' name='vyber[]'  value='15-b-7'></td></tr>
    <tr><td onclick='oznac(this)' class='cas vybrany'>Novák Jan<input type='checkbox' name='vyber[]' checked='checked'  value='3-b-7'></td></tr>
    <tr><td onclick='oznac(this)' class='cas vybrany'>Veselý Petr<input type='checkbox' name='vyber[]' checked='checked'  value='1-b-7'></td></tr>
</table>
s tím, že první číslo ve value znamená id uživatele...
a potom vedle tu tabulku s tím počtáním
<table>
    <tr><td>Novák Jan</td> <td><input type="text" value="5" id="c3"></td></tr>
    <tr><td>Novotný Dan</td> <td><input type="text" value="5" id="c15"></td></tr>
    <tr><td>Veselý Petr</td> <td><input type="text" value="5" id="c1"></td></tr>
</table>
k označování buněk používám tenhle skript:
   function oznac(td) {            // označování buněk
            var input = td.getElementsByTagName('input')[0];
            if (input.checked) {
                td.className = 'cas';
                input.checked = false;
            } else {
                td.className = 'vybrany cas';
                input.checked = true;
            }
        }

Podstata bude v tom podle první hodnoty ve value právě změněného checkboxu přičíst nebo odečst 1 v inputu v druhé tabulce podle id. Já jen prostě stále nechápu, jak se ty třídy pomocí toho js vytahují a odkazuje se na ně. Tohle je na mě moc...
SkyVessel
Profil
Takže jsem se konečně dostal opět k programování. Trochu jsem seděl nad tím js a zkoumal základy. Díky tomu se mi povedlo sestrojit něco, co velmi blízko odpovídá mojim potřebám. Jen to úplně ještě nedělá to, co bych chtěl.
<script>
    function pridatVybranym(user) {
        var vyber = document.getElementById(user);
        var prepocet = document.getElementById(user+"ch");

        if (vyber.checked)
            prepocet.value = (prepocet.value * 1) + 1;
        else
            prepocet.value = (prepocet.value * 1) - 1;
    }
</script>

<table>
<tr><td onclick='pridatVybranym("user1")'>user 1 <input type='checkbox' id='user1'></td></tr>
<tr><td onclick='pridatVybranym("user1")'>user 1 <input type='checkbox' id='user1'></td></tr>
<tr><td onclick='pridatVybranym("user1")'>user 1 <input type='checkbox' id='user1'></td></tr>
<tr><td onclick='pridatVybranym("user2")'>user 2 <input type='checkbox' id='user2'></td></tr>
<tr><td onclick='pridatVybranym("user2")'>user 2 <input type='checkbox' id='user2'></td></tr>
<tr><td onclick='pridatVybranym("user3")'>user 3 <input type='checkbox' id='user3'></td></tr>
<tr><td onclick='pridatVybranym("user3")'>user 3 <input type='checkbox' id='user3'></td></tr>
<tr><td onclick='pridatVybranym("user3")'>user 3 <input type='checkbox' id='user3'></td></tr>
</table>

<table>
<tr><td>user 1</td><td><input type='text' id='user1ch' value='3'></td></tr>
<tr><td>user 2</td><td><input type='text' id='user2ch' value='1'></td></tr>
<tr><td>user 3</td><td><input type='text' id='user3ch' value='9'></td></tr>
</table>
...přičítá i odčtá. Jenže bere v potaz jen první checkbox daného id. Je mi jasné, že Id má být jedinečné, proto se obracím na vás.
Jak docílit toho, aby mi to k danému uživateli přičetlo nebo odečetlo jen za daný checkbox, který zaškrtnu/odškrtnu?
_es
Profil
SkyVessel:
Je mi jasné, že Id má být jedinečné
No a keď ti to jasné, prečo ho teda jedinečné v rámci celého dokumentu nemáš? Metóda document.getElementById nájde prvý element s daným id, podľa čoho ti to aj „funguje“.
SkyVessel
Profil
No ... asi jsem to nezmínil ... na té stránce je různý počet checkboxů pro daného uživatele. A já právě nevím, jak udělat to jedinečné id, abych ho pak dokázal pomocí té funkce přičíst k danému uživatelovi... Napadlo mě, že by to mohlo jít s this, ale to jsem zatím nepochopil, jak se s tím dělá :)
juriad
Profil
Co třeba takto:
http://kod.djpw.cz/zndb

Není třeba vůbec přidávat id; prostě najdeš input, který je uvnitř aktuální buňky tabulky.
SkyVessel
Profil
Atribut user... wow - to vypadá dobře :). Tak tohle si pořádně nastuduji. Nenapadlo mě, že tam jde strčit cokoliv.
Díky
juriad
Profil
Pokud se to nebude líbit validátoru (v praxi to ničemu vadit nebude), změň ten atribut na data-user. Podle specifikace HTML5 si můžeš vytvořit své atributy prefixované data-.
SkyVessel
Profil
Ah... mě napadlo, že se to validátoru nebude pozdávat, ale už dlouho předlouho jsem nevalidoval, takže jsem to ani neřešil :). No když už jsme u toho tak jedna offtopicová: html5 zvládnou i starší prohlížeče? Nebo nepřežvýkají ty "nové" vychytávky a jednoduše je přeskočí?
lionel messi
Profil
SkyVessel:
html5 zvládnou i starší prohlížeče? Nebo nepřežvýkají ty "nové" vychytávky a jednoduše je přeskočí?
S podporou HTML5 je to asi takto: každý bežný prehliadač podporuje časť HTML5 a žiadny dostupný prehliadač nepodporuje všetko z HTML5. Preto je lepšie sa vyvarovať príliš exotických vecí či „vychytávok“, kt. podporuje len 1 — 2 prehliadače.
SkyVessel
Profil
lionel messi:
Preto je lepšie sa vyvarovať príliš exotických vecí či ‚vychytávok‘
Jap. Díky. Integrace nových věcí je asi nejvíce pomalý jev :)...
CZghost
Profil
[#8] juriad:
Tvůj fork mi umožňuje snižovat či zvyšovat hodnotu pomocí dvojkliku na checkboxech, Internet Explorer 9, Windows Vista. To asi není zamýšlený efekt :D

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: