Autor Zpráva
jenad
Profil
Ahoj, hraji si s tabulkami a skrýváním jejich sloupců. Na internetu jsem našel následující kód:

---------------------------
<html>
<body>

<script>
function show_hide_column(col_no, do_show) {
    var tbl = document.getElementById('id_of_table');
    var rows = tbl.getElementsByTagName('tr');

    for (var row = 0; row < rows.length; row++) {
        var cols = rows[row].children;
        if (col_no >= 0 && col_no < cols.length) {
            var cell = cols[col_no];
            if (cell.tagName == 'TD') cell.style.display = do_show ? 'block' : 'none';
        }
    }
}
</script>
<table id='id_of_table' border=1>
    <tr><td colspan="4"><table><tr><td>Can haz nested table?</td></tr></table></td></tr>
    <tr><td>  2</td><td>   two</td><td>   deux</td><td>     zwei</td></tr>
    <tr><td>  3</td><td> three</td><td>  trois</td><td>     drei</td></tr>
    <tr><td>  4</td><td>  four</td><td>quattre</td><td>     vier</td></tr>
    <tr><td>  5</td><td>  five</td><td>   cinq</td><td>f&uuml;nf</td></tr>
    <tr><td>  6</td><td>   six</td><td>    six</td><td>    sechs</td></tr>
</table>
<form>
    Enter column no: <input type='text' name=col_no><br>
    <input type='button' onClick='javascript:show_hide_column(col_no.value, true);' value='show'>
    <input type='button' onClick='javascript:show_hide_column(col_no.value, false);' value='hide'>
</form>
 </body>
 </html>
---------------------------
V něm je možnost pomocí zadání čísla sloupce tabulky do formuláře potřebný sloupce skrýt , pokusil jsem uvedený formulář nahradit automatickým skrytí sloupce (tady sloupec číslo 1) nezávislém na formuláři. Bohužel níže uvedený kód nefunguje:

<script>
show_hide_column(1, false)
</script>


Můžete mi prosím pomoci v čem dělám chybu?
quatzael
Profil
jenad:
Dej pryč ten prefix z onClick:
javascript:



jenad:
A kde máš prosímtě definovanou hodnotu col_no? Mít to jen v atributu name nestačí..
Joker
Profil
jenad:
Bohužel níže uvedený kód nefunguje
Nespouštíte ho třeba ve chvíli, kdy ty buňky ještě vůbec neexistují (tj. <script> je v kódu dříve než <table>)?

quatzael:
A kde máš prosímtě definovanou hodnotu col_no?
Je to vstupní parametr té funkce. Jestli to volá přes show_hide_column(1, false), je to ta 1.
quatzael
Profil
Zkus to upravit takhle:

<form>
    Enter column no: <input id="col_no" type='text' name="col_no"><br>
    <input type='button' onClick='show_hide_column(document.getElementById("col_no").value, true);' value='show'>
    <input type='button' onClick='show_hide_column(document.getElementById("col_no").value, false);' value='hide'>
</form>



Případně taky takhle:

<form>
    Enter column no: <input type='text' name='col_no'><br>
    <input type='button' onClick='show_hide_column(document.getElementsByName("col_no").value, true);' value='show'>
    <input type='button' onClick='show_hide_column(document.getElementsByName("col_no").value, false);' value='hide'>
</form>
Chamurappi
Profil
Reaguji na quatzaela:
Hledáš problém v části kódu, o které nepíše, že by mu nefungovala…

Dej pryč ten prefix z onClick
Ničemu nevadí, i když je zbytečný.

kde máš prosímtě definovanou hodnotu col_no?
V this.form je člen toho názvu a uvnitř atributů je implicitní with(this.form). Takže mít ho v name stačí.


Reaguji na jenada:
Sloupec číslo 1 je druhý sloupec. Sloupce se číslují od nuly.
Uvedený kód mi funguje. Jestli u tebe nedělá vůbec nic, prosím o odkaz na živou ukázku.

cell.style.display = do_show ? 'block' : 'none';
Tady bych doporučil mít '' místo 'block'. Jinak hrozí v některých prohlížečích rozpad při zobrazení.

var cols = rows[row].children;
A tady cells místo children. Jinak hrozí nefunkčnost ve starších prohlížečích (vyjma Exploreru).
quatzael
Profil
Jo a zapomněl jsi tam napsat uvozovky: name=col_no

Myslím, že je lepší psát dvojitý, ale to by neměl být problém.


Chamurappi:
Ničemu nevadí, i když je zbytečný.
To vím.

V this.form je člen toho názvu a uvnitř atributů je implicitní with(this.form). Takže mít ho v name stačí.
To jsem nevěděl.
Chamurappi
Profil
Reaguji na quatzaela:
zapomněl jsi tam napsat uvozovky
Nezapomněl, nejsou povinné.

Případně taky takhle
To je nefunkční kód, getElementsByName vrací kolekci elementů.
Prakticky nikdy není důvod používat metodu getElementsByName, nevím, proč po ní lidé sahají.
jenad
Profil
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Kluci díky všem za reakci (a ještě tak rychlou), chybu se mi podařilo opravit a dát do svého řešení. Chyba nebyla v kódu - opravdu fungoval jak jsem jej uvedl, ale chyba byla v mém PC a spouštění skriptů v prohlížeči. Chamurappi cílil správným směrem.

Jediná neplecha, která mně v této souvislosti ještě trápí je to, že skrývám sloupce ve dvou tabulkách - jedná je záhlaví a druhá obsahuje data (2 kvůli scrollování dat, jež beru z mysql). Přičemž 1 tabulka je OK, sloupce zachovají velikost, ale v tabulce číslo 2 se sloupce roztáhnou na původní velikost tabulky. Nemohu přijít na to, čím tuto vlastnost ovlivním.

Pro přesnější info můžete mrknout na živou ukázku: tank.8u.cz Hráč: jenad Heslo: vstup/ řešená část - seznam vlevo, položka "TS"-podpoložka "pokec"
(tmavá část tabulky OK, světlá je špatně)

Moderátor Joker: Odstranil jsem zkopírovaný kód stránky.
Jednak se celý nevešel do příspěvku a jednak není žádoucí vkládat kilobajty kódu. Buď jen problémové místo, nebo živou ukázku.
jenad
Profil
jj taky jsem na to přišel a byls rychlejší s úpravou. Dal jsem živou ukázku, ale kde je problémové místo nevím, proto přikládám odkaz na soubor:
Moderátor Chamurappi: Odkaz vymazán. Nepoužívej na sdílení souborů úložiště, která chtějí peníze nebo opsat captchu. Ten filtr tu není pro srandu králíkům…
juriad
Profil
jenad:
Já ti bohužel neporadím, ale někdo jiný v České republice určitě ano :)
403 - Přístup odepřen
Z důvodu opakujících se problémů s napadáním hostovaných aplikací došlo k zablokování odesílání POST požadavků ze zahraničí.
Tuto funkci si může vlastník webu vypnout ve své administraci.
jenad
Profil
juriad:
Ahoj, snaha se cení, děkuji. Můžeš se už na to podívat. Uvedenou blokaci jsem odstranil. Tak pokud budeš moci mrkni nato. Předem děkuji.
juriad
Profil
Možná by bylo fajn říct, že sloupce se přepínají klikáním na ta šikmá tlačítka nahoře (a že tlačítko VŠE nefunguje). :-)
Ať dělám co dělám, tak sloupce v hlavičce tabulky jsou stejně široké jako sloupce v těle. Tedy na sebe vizuálně navazují. Používám Mozilla Firefox 31.0.

Co znamená, že zachovají velikost? Při různém počtu sloupců jsou různě široké. Pokud to tak nechceš, zruš width u obou tabulek.
jenad
Profil
juriad:
Má poklona pane.._.)) i přes pastičky, jež mně byly samozřejmé, jsi mi odboural tuto starost, pomohlo zrušení width. Díky moc.

Téma vyřešeno. Díky všem.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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