| Autor | Zpráva | ||
|---|---|---|---|
| janek007 Profil |
#1 · Zasláno: 7. 4. 2016, 08:59:24
Zdravím,
v js se vůbec neorientuji a jen vkládám a upravuji části kódů, které někde najdu, ale zrovna se mi nedaří rozchodit věc, že budu mít na stránce více buttonů a po jejich stisku se skryje určitá část pomocí toggle. Když stisknu jakékoli tlačítko v proměnné mám stále jen hodnotu .detail_1, kde dělám chybu? Také bych se chtěl zeptat, lze v php generovat části kódu už rovnou skryté? Zatím to řeším tak, že normálně pomocí php a html vygeneruju celou stránku a po načtení zavolám $(".detail_1").hide(); ale je problém, že nevím kolik těch detailů bude. Tak jestli se nechá nějak napsat funkce skryj vše co začíná "detail_*". <script>
$(document).ready(function(){
$(".detail_1").hide();
$(".detail_2").hide();
$("button").click(function(){
var hodnotaTlacitka = $("button").val();
$("." + hodnotaTlacitka).toggle();
alert("." + hodnotaTlacitka);
});
});
</script><button value="detail_1">1</button> <button value="detail_2">2</button> <button value="detail_3">3</button> <button value="detail_4">4</button> Děkuji za pomoc. |
||
| Kcko Profil |
janek007:
Dej si tomu nějakou třídu třeba hide-on-init <button value="detail_1" class="hide-on-init">1</button> a pak $('.hide-on-init').hide();
A jestli Ti to blbne tak z toho udělej živou ukázku a přidej na ní sem odkaz. |
||
| Radek9 Profil |
janek007:
Funkce $ (předpokládám, že jde o jQuery, správně?) vybírá kolekci elementů. Pokud na ni potom (jako na 7. řádku) použiješ funkci typu val, která bere hodnotu z nějakého elementu, vezme se vždy z toho prvního. Pokud chceš brát hodnotu z konkrétního elementu, na který byla zavolána událost click, použij this:
var hodnotaTlacitka = $(this).val(); Nebo ještě lépe (protože je zbytečné vytvářet jQuery obal): var hodnotaTlacitka = this.value; |
||
| janek007 Profil |
Tak super. děkuju moc. S tím this to bylo přesně ono a už to funguje. Ano používám jquery.
A teď ještě poslední věc. Lze využít nějaké zástupné znaky. Java script volám na začátku programu a v té době ještě nevím kolik vygeneruju řádků v tabulce. Lze nějak skrýt vše co by odpovídal masce. Například vše co má class začínající "detail_"? Zatím to řeším tak, že si nad každým řádkem generuju i JS kód <script>
$(document).ready(function(){
$(".detail_<?php echo $temp["id_header"]; ?>").hide();
});
</script>, ale to mi nepříde jako moc elegantní řešení. Když je js a html promíchané. |
||
| Radek9 Profil |
janek007:
Buď jim můžeš přidat ještě jednu třídu, nebo je vybrat pomocí nějakého obecnějšího selektoru (to jsou řádky v tabulce?), nebo použít atributový selektor: $("[class^=detail_]").hide();Edit: Možná ještě lépe to udělat rovnou v CSS: [class^=detail_] {
display: none;
} |
||
| janek007 Profil |
#6 · Zasláno: 8. 4. 2016, 12:30:41
Ano jsou to řádky v tabulce. Vždy si nechávám jen první řádek a zbytek schovávám a zobrazím ho až po kliknutí.
class^=detail_ funguje výborně :)) Děkuji za pomoc. Ještě zdaleka nekončím, tak se určitě ještě ozvu :D |
||
| Radek9 Profil |
#7 · Zasláno: 8. 4. 2016, 13:11:52
janek007:
V tom případě je možná lepší něco takového: #tabulka tbody tr {
display: none;
}
#tabulka tbody tr:first-child {
display: table-row;
}Případně přes jeden selektor (ale nejsem si jistý podporou): #tabulka tbody tr:nth-child(n+2) {
display: none;
} |
||
|
Časová prodleva: 10 let
|
|||
0