Autor Zpráva
nowis
Profil
Zdravím,

jak mohu zjistit, na který řádek jsem v tabulce kliknul? Mám tabulku a chtěl bych, aby se mi po kliknutí na určitý element v řádku (obrázek) daný řádek smazal. Dělal bych to javascriptem pomocí onClick=smazatRadek(x) a následně deleteRow(x) - jen nevím, jak přijít na to číslo řádku (x) na kterém jsem kliknul.

Díky
Tomášeek
Profil
nowis:
Číslo řádku nepotřebuješ, aktuální řádek, do kterého bylo kliknuto, je v parentNode.parentNode, pokud je struktura TR-TD-IMG.
nowis
Profil
Aha, OK, díky, to zni slibně, nicméně v JS nejsem moc kovaný, poradil bys mi prosím, jak bych to měl napsat trošku konkrétněji?
pcmanik
Profil
Vyber si v kóde či ti záleží na IE 11 alebo nie.

<table id="table">
    <tr>
        <td><span class="remove">Zmazat</span></td>
    </tr>
</table>
document.getElementById('table').onclick = function(event) {
    var target = event.target;

    // Bez podpory IE <= 11
    if (target.className == 'remove') target.parentNode.parentNode.remove();
   
    // alebo podpora vsade
    if (target.className == 'remove') {
        var row = target.parentNode.parentNode

        row.parentNode.removeChild(row);
    }
}
Tomášeek
Profil
pcmanik:
V posledni závorce ma byt row, nikoliv parent.

Jinak nechápu, jaky je důvod odstřihnout čast prohlížečů, pokud je mozné to udělat pro všechny. Obzvlášt, jsou-li obe řešení stejne krátká. Prvni kód je tedy naprosto zbytečný, stačilo ponechat uvést ten vsepodporujici.
pcmanik
Profil
Tomášeek:
Ďakujem za upozornenie.

Poskytol som dve riešenia jedno moderné - pre všetky podporované prehliadače (IE11 už podporovaný nieje). A druhé ktoré myslí práve na tie staré a je len na nowis aby si vybral čo je jeho cieľ.

Nieje dôvod nebyť informovaný aj o nových veciach v jazyku a nielen sa stále zaoberať archaickými prehliadačmi.

Ty sa skôr už zamysli nad svojimi príspevkami väčsina z nich nemá žiadnu hodnotu len vyrýva do tazatelov.
nowis
Profil
Tomášeek, pcmanik:
Pánové díky. Přepsal jsem si to do takové formy

<table>
  <tr>
    <td>
      <img src='img.gif' onclick=smazRadek(event)/>
    </td>
  </tr>
</table>
.
.
.
function smazRadek(event) {
    var target = event.target;
    var row = target.parentNode.parentNode;
    row.parentNode.removeChild(row);
}

Je to takto OK? Tedy funguje to, jen jestli tam není nějaký problém, který nevidím... Přijde mi to takhle jednodušší, než to řešit přes class. A jen abych pochopil co to vlastně dělá - co jsou hodnoty v proměnných target a row? Jak říkám, nejsem v JS moc kovaný, tak se omlouvám, jestli jsou ty otázky stupidní...
pcmanik
Profil
nowis:
Kombinovať js s html nieje najlepší nápad je to zle udržovateľné, preto je lepší spôsob ako som ti ukázal že priradíš tabuľke id a odchytávaš kliknutia na nej.
Ale samozrejme to funguje aj tak ako máš ty.

V target je element na ktorý bolo kliknuté v tvojom prípade ten img. A row je <tr> v ktorom prišlo k tomu kliku.
nowis
Profil
pcmanik:
Díky za vysvětlení. Sám bych to sice nevymyslel ani teď, ale už asi chápu, co to dělá :-)
Tomášeek
Profil
pcmanik:
Poskytol som dve riešenia jedno moderné
K čemu je použít to moderní, když nefunguje všude, kde je třeba? Nebo ti, co mají archaickou (to je mimochodem hloupé označení) IE11, nebudou moci řádky mazat?

Neříkám, kdyby řešení bylo kratší, rychlejší na zpracování nebo řádově lehčí na napsání (jeden řádek vs. 100řádková funkce). Ale takto?

Ty sa skôr už zamysli nad svojimi príspevkami väčsina z nich nemá žiadnu hodnotu len vyrýva do tazatelov.
Děkuji za péči o mé příspěvky.

Jádro toho příspěvku bylo v chybě, kterou jsi vytvořil (jasně, jen typo, nic velkého). Jelikož jsme na diskusi, tak nebylo ani od věci vyjádřit se k tomu kódu, naprosto věcně. Přidaná hodnota nula, jen negativa (nefunkčnost). Takový kód a rada je na houby. Podporou staršího prohlížeče přeci není X let fungující kód zastaralý nebo neaktuální. To, že podporuje i starší verze prohlížečů je jen vedlejší efekt.

Pokud bych měl uvést nějaký protipříklad, vezměme třeba kulaté rohy v CSS.
Nikdo po tobě nechce, abys je tvořil sadou obrázků jako před patnácti lety. Použiješ border-radius a kdo se zapomněl v pravěku, kulaté rohy neuvidí.
Pokud by ale v CSS4 vznikla vlastnost corner-radius (což je mimochodem věcnější pojmenování) podporovaná jen v nejnovějších prohlížečích, ale dělajíc naprosto totéž, není jediný důvod po ní sáhnout na úkor border-radius. Totéž platí pro dvojici .removeChild vs. remove()

U rohů se bavíme stále jen o designu, hranatý roh ničemu vadit nebude. Klik na tlačítko "Smazat", který nic nedělá kvůli remove() je ale hloupý.
Keeehi
Profil
pcmanik:
Dalo by se to ještě pochopit, kdyby kód na odstranění elementu ve starších prohlížečích byl tak složitý, že by zabral 50 řádků. Ale on není.
pcmanik
Profil
Tomášeek, Keeehi:
Ako nechápem o čo vám ide, uviedol som 2 príklady s tým že je na nowis aby si vybral na akej podpore prehliadačov mu záleží. Nikde nepíšem že má kašlať na staré IE / ze removeChild je fuj a podobne.
Aspoň sa naučí že sú dve možnosti ako to urobiť.

Přidaná hodnota nula, jen negativa (nefunkčnost)
Väčšina tvojich príspevkov má práve tú hodnotu nula. Ja som tu uviedol dve možnosti aj s podporou ako to riešiť.
Ty si na tejto diskusii len honíš ego a veľké hov_no tu radíš. Robíš si posmešky ba priam urážaš niektorými svojimi príspevkami. Tak láskavo nemudruj.
Tomášeek
Profil
pcmanik:
Ego? Urazim? Kde jsem te prosím urazil?
pcmanik
Profil
Tomášeek:
Nie mňa, ja som nad vecou :) Ale tých čo sa sem obracajú so svojimi problémami.
Tomášeek
Profil
pcmanik:
Stejne bys mel byt konkretni.

Konkretne tady jsem odpověděl vcelku dostatečně, na removechild se tazatel neptal, jen na cislo řádku.

Někde třeba konkretni nejsem, ale z 99% jde o banality, ktere jsou snadno nalezitelne, jen tazatel neprojevil špetku snahy. Nicméně bez urážek ci ega. Za honeni ega by mi tu strávený cas přišel líto a draho :-)
Kcko
Profil
Tomášeek:
>> Za honeni ega by mi tu strávený cas přišel líto a draho :-)

Ani jsem si nevšiml, tvoje odpovědi jsou velmi roztahané a mnohdy zcela zbytečné, máš potřebu se vyjádřit ke všemu, připomínáš mi chytrolína Petr ZZZ, akorát jsi na tom technicky lépe. Souhlasím s tím co jsi napsal v tomto topicu a také souhlasím s tím, co napsal pcmanik, mnohdy jsou tvoje odpovědi zbytečně arogantní a mimo mísu, máš mnohdy potřebu uživatele vychovávat, jsi mi krajně nesympatický.

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:

0