Autor | Zpráva | ||
---|---|---|---|
aladin Profil * |
#1 · Zasláno: 21. 4. 2013, 14:58:48
Zdravím,
mám takovou menší poruchu :D potřeboval bych poradit,jak to udělat.. udělal jsem si tabulku,ve které mám jména po kliknutí na jméno,se má vedle jména objevit nová tabulka,která bude ukazovat čas registrace.. jenže po kliknutí na jaký koliv jméno se mě zobrazí stejný datum+ zobrazuje se to pořát u jednoho jména.. myslel jsem si že se to bude zobrazovat vedle jména na kterého kliknu..ale nějak to nefunguje..je to chyba v js nebo css? php mám správě,bez toho js to ukazuje dobře JS: <script language="javascript" type="text/javascript"> function showHide() { var ele = document.getElementById("showHideDiv"); if(ele.style.display == "block") { ele.style.display = "none"; } else { ele.style.display = "block"; } } </script> <style type="text/css"> .table{ position: absolute; text-align:center; border:2px solid orange; margin-top:-20px; margin-left: 181px; width:100px; height:20px; background-color:#696969; font-size:130%; padding:10px;" } </style> PHP (je to zabalené ve while) while ($rows = mysql_fetch_assoc($offline)) { echo '<i> <b> <img src="http://wall.cz/pictures/groupicons/status_offline.png"> <a onclick="return showHide();">' .$rows["prezdivka"].'</a> <div id="showHideDiv" class="table" style="display:none;"> <font size="2px" color="white"> '.$hoursAndMinutes.' </font> </div> </b> </i> '; |
||
quatzael Profil |
#2 · Zasláno: 21. 4. 2013, 15:11:46 · Upravil/a: quatzael
A v čem máš problém?? V CSS stylech, že se to zobrazuje jinde, nebo se to nezobrazuje vůbec??
Podle toho cos tady napsal nejde o žádnou tabulku, ale o div s class nazvanou table.. Pokud chceš, aby to bylo vedle toho, tak to buď předělej jako tabulku nebo tam do toho CSS přidej ještě display: inline-block; Takhle je tam automaticky u elementu <div> display na hodnotě block a tím pádem se to háže pod to.. |
||
aladin Profil * |
#3 · Zasláno: 21. 4. 2013, 15:20:40
no je to "rádoby" tabulka..prostě takovej obdelník v divu..:D
doslova to tabulka není.. zobrazu je se to v pořádku,ale jsou tam 2 problémy 1) nezobrazuje se to vedle toho jména 2) nezobrazuje to správný čas..když oddělám ten js,tak to ukazuje všechno správně ten čas..ale když ho tam vrátím,tak ten čas je u všech stejný... |
||
quatzael Profil |
#4 · Zasláno: 21. 4. 2013, 15:57:08 · Upravil/a: quatzael
Jestli můžeš, tak sem dej živou ukázku, třeba jen přes jsfiddle.net
aladin: „1) nezobrazuje se to vedle toho jména“ kde se to teda zobrazuje?? Problém bude asi v tom jaký styly máš nastavený u obalovýho elementu.. u toho <a> bys měl mít taky nastavenej display: inline-block; Jestli tam máš víc elementů s id="showHideDiv" tak Ti to určitě fungovat nebude.. |
||
preca1 Profil |
#5 · Zasláno: 21. 4. 2013, 16:19:31
Zdravim,
není problém v tom, že máš v HTML vícero elementů se stejnym ID, takže se ti vždy zobrazí pouze první? Uprav to tak, že každému skrytému divu vygeneruj unikátní ID (např. "hoursAndMinutes-" . $userId ). A funkci pro skrývání/zobrazování onoho divu předávej jako parametr ono ID a podle toho pak ten element hledej.
|
||
aladin Profil * |
#6 · Zasláno: 21. 4. 2013, 16:38:10 · Upravil/a: aladin
quatzael:
na tom jsfiddle nejde připojit k db ani php..tak sem hodím skutečnou stránku http://settlers.clanweb.eu/statusUser.php kliká se na jména... jinač k tomu divu nemůžu dát display: inline-block; když tam mám display: none.. kdybych tam neměl none tak se mě to nebude zobrazovat... Ale přitom ve zdrojáku to ukazuje správně ty hodnoty...takže chyba bude jen v tom JS... a také to css..aby se ukazovalo vedle toho jména.. |
||
quatzael Profil |
#7 · Zasláno: 21. 4. 2013, 16:51:05
aladin:
problém je v tom co už zmiňoval i preca1. Máš tam u všech těch divů stejný id.. Buď musíš přiřadit každýmu divu jedinečný id nebo přistupovat k těm elemntům sofistikovaněji, například pomocí jQuery a vhodným selectorům.. |
||
aladin Profil * |
#8 · Zasláno: 21. 4. 2013, 17:14:54 · Upravil/a: aladin
tak jsem to upravil,jestli jsem to pochopil dobře,tak jsem přiřadil ke každýmu divu jméno toho uživatele..
ale nějak mě to ted nechce reagovat,v konzole mě to píše že divId id null.. můžete se tam kouknout a říct mě kde mám chybu? tak už mě to jde,místo jména jsem tam dal jejich ID..a už to i ukazuje u všech správně..Díky za rady chlapy :) |
||
quatzael Profil |
#9 · Zasláno: 21. 4. 2013, 17:22:56 · Upravil/a: quatzael
aladin:
V tom kódu máš tolik chyb, že ani nevím čím začít.. například tě vůbec nebolí, že tam nemáš žádný <body>, neuzavíráš elementy apod.. Pak se Ti to bude v každým prohlížeči zobrazovat jinak.. |
||
aladin Profil * |
#10 · Zasláno: 21. 4. 2013, 17:25:49
quatzael:
body tam nemám,jelikož to pak načítám ajaxem do jiné stránky kde body už mám..nebo to může bejt i to který načítám? jinač ještě jsem se chtěl zeptat.. ještě by bylo dobrý,že pokud kliknu na jiný jméno,tak to okno co mám otevřený,by se zavřelo,a otevřelo by se to,na co bych klikl.. aby nebyly prostě otevřený obě okna... (toho divu) |
||
preca1 Profil |
onclick="return showHide('sotek');" Vysvětlí mi někdo, jaktože se do tý funkce předá undefined, když se volá bez parametru, ale když se zavolá s nedefinovanou proměnnou, tak se tam předá event? aladin: „ještě by bylo dobrý,že pokud kliknu na jiný jméno“ To se tu řešilo celkem nedávno. Zkus hledat, nebo si projdi JS sekci trochu do historie a kdyžtak sem napiš řešení. Možná by stálo za to to dát do FAQ. |
||
quatzael Profil |
#12 · Zasláno: 21. 4. 2013, 17:34:45 · Upravil/a: quatzael
aladin:
> ještě by bylo dobrý,že pokud kliknu na jiný jméno,tak to okno co mám otevřený,by se zavřelo,a otevřelo by se to,na co bych klikl.. > aby nebyly prostě otevřený obě okna... (toho divu) Tak tam ještě přidej hide pro tu class: <script language="javascript" type="text/javascript"> function showHide(name) { var divId = document.getElementById(name); if(divId.style.display == "block") { divId.style.display = "none"; } else { document.getElementsByClass("table").style.display = "none"; divId.style.display = "block"; } } </script> aladin: Úplně nejlepší by to bylo přes jQuery.. |
||
aladin Profil * |
#13 · Zasláno: 21. 4. 2013, 17:43:05 · Upravil/a: aladin
quatzael:
Jak to myslíš hide? jako hidden? jelikož v display hide snad není ne? možná ano,tady jsem našel jeden kterej má i animaci rolování.. ale to až možný dýl..ted to potřebuju dodělat hlavně :) http://papermashup.com/simple-jquery-showhide-div/ |
||
quatzael Profil |
aladin:
promiň, já používám téměř výhradně jQuery, takže už normálně v JS příkazech neuvažuju.. když tam ale vložíš tohle, tak by to mělo fungovat, ne? document.getElementsByClass("table").style.display = "none"; |
||
aladin Profil * |
#15 · Zasláno: 21. 4. 2013, 17:49:20
ne,nejde to..ani se to nezobrazí..
|
||
quatzael Profil |
#16 · Zasláno: 21. 4. 2013, 17:51:41 · Upravil/a: quatzael
aladin:
co máš za verzi prohlížeče?? aladin: Musíš to hlavně dát před tohle: divId.style.display = "block"; Tak jak jsem Ti tam celý psal.. |
||
aladin Profil * |
#17 · Zasláno: 21. 4. 2013, 17:54:26
však to tak mám..
<script language="javascript" type="text/javascript"> function showHide(name) { var divId = document.getElementById(name); if(divId.style.display == "block") { divId.style.display = "none"; } else { document.getElementsByClass("table").style.display = "none"; divId.style.display = "block"; } } </script> mám mozillu nejnovější |
||
juriad Profil |
quatzael myslel
document.getElementsByClassName a příště si to raději ověří
Nicméně, tato funkce není široce podporovaná. https://developer.mozilla.org/en-US/docs/DOM/document.getElementsByClassName#Browser_compatibility |
||
quatzael Profil |
#19 · Zasláno: 21. 4. 2013, 17:56:41
juriad:
jojo, teď jsem to chtěl opravit.. předběhl jsi mě..:o) |
||
aladin Profil * |
#20 · Zasláno: 21. 4. 2013, 18:01:47
ted mě to zas píše
TypeError: document.getElementsByClassName(...).style is undefined |
||
preca1 Profil |
#21 · Zasláno: 21. 4. 2013, 18:19:18
quatzael:
„promiň, já používám téměř výhradně jQuery, takže už normálně v JS příkazech neuvažuju..“ Je to vidět. Příště prosím tě víc přemýšlej a míň piš. Neni to poprvý, co píšeš bludy, nebo nepřesnosti. aladin: Ta metoda vrací kolekci. Stačí si přečíst zde odkazovanou dokumentaci. Aby ti to fungovalo všude (IE < 9), bude lepší když si najdeš nějakou alternativu. |
||
aladin Profil * |
#22 · Zasláno: 21. 4. 2013, 19:15:26
no,myslím že bude lepší asi udělat to v tom jQuery...
|
||
Chamurappi Profil |
Reaguji na aladina:
Copak jste to tady s quatzaelem napatlali? Nečetl jsem celou debatu. Kolik elementů se má zobrazit při kliknutí? Jestli jen jeden, je nesmysl hledat podle tříd. A mají se ostatní dříve zobrazené skrýt? Proč používáš <a> na něco, co není odkaz? Proč <font size="2px" color="white"> ? Do size se píše jedno číslo, ne CSS délka.
„myslím že bude lepší asi udělat to v tom jQuery“ Ne. Reaguji na quatzaela: „já používám téměř výhradně jQuery, takže už normálně v JS příkazech neuvažuju..“ Pokud nerozumíš JavaScriptu, nerozumíš ani jQuery. Reaguji na precu1: „Vysvětlí mi někdo, jaktože se do tý funkce předá undefined, když se volá bez parametru, ale když se zavolá s nedefinovanou proměnnou, tak se tam předá event?“ Teď nerozumím, co máš na mysli. Ukázka? |
||
aladin Profil * |
#24 · Zasláno: 21. 4. 2013, 20:52:15
našel jsem si na google že ten google má aplikaci jQuery na toto téma..jenže mám zas stejnej problém,pokud kliknu na jeden,rozjedou se všechny..
tady se to otevírá pomocí class,nikoliv pomocí funkce jak to teda upravit abych tam nadefinoval třeba ty ID uživatelu? Odkaz kde jsem to sehnal: http://papermashup.com/simple-jquery-showhide-div/ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ $(".Show"+name).show(); $(".div"+name).hide(); $(".Show"+name).click(function(){ $(".div"+name).slideToggle(); }); }); </script> echo '<i> <b> <img src="http://wall.cz/pictures/groupicons/status_offline.png"> <a href="#" id="show_hide" class="Show">' .$rows["prezdivka"].'</a> <div id="slidingDiv" class="div"> <font size="2px" color="white"> '.$hoursAndMinutes.' </font> </div> </b> </i> '; |
||
Chamurappi Profil |
#25 · Zasláno: 21. 4. 2013, 21:27:12
Reaguji na aladina:
„Odkaz kde jsem to sehnal“ Kdybys ho dal klikatelný, tak bych se tam možná podíval. Ale spíš ne. „že ten google má aplikaci jQuery na toto téma..“ Nemá. Jen umožňuje autorům stránek načítat jQuery z jejich serverů. Nevím, proč chceš zabalovat všechny elementy. To nestačí zabalit ten, který byl naposledy rozbalený? Já bych na to šel nějak takhle: var lastElement; function showHide(element) { if(lastElement && lastElement != element) lastElement.className = ""; element.className = element.className ? "" : "show"; lastElement = element; } "show" a "" .
Z věci, která má rozbalovat, bych nedělal odkaz (nebo snad bude mít smysluplný href ?) a dal bych jí onclick="showHide(this.parentNode)" . Ídéčka ani třídy nepotřebuješ.
Ve stylopisu bych se pak postaral o to, aby v případě, že má rodič té klikací věci třídu show , byl obsah viditelný. V opačném případě nechť má display: none . Třída může ovlivnit víc věcí.
|
||
preca1 Profil |
#26 · Zasláno: 21. 4. 2013, 21:36:35
Chamurappi:
<a onclick="console.log(sotek);" href="javascript:void(0);">sotek</a> // proměnná sotek obsahuje odkaz na div#sotek <div id="sotek"></div> |
||
aladin Profil * |
#27 · Zasláno: 21. 4. 2013, 21:38:31
asi jsi mě nepochopil..
napíšu to znova.. mám vyčtený seznam lidí z db (pomocí while) a u každýho když na něj kliknu tak bych potřeboval aby se vedle něj rozbalil,nebo zobrazil ten div ve kterém bude nějaký text..(v mém případě čas registrace) takže pokud kliknu třeba na nick1 tak se vedle něj objeví ten div pokud kliknu na jiný nick,třeba nick2 tak se ten div z nick1 odstraní a objeví se ten pro nick2 apod... |
||
juriad Profil |
#28 · Zasláno: 21. 4. 2013, 21:52:11
OK, je čas přestat blbnout. http://artique.cz/onclick.html
|
||
aladin Profil * |
#29 · Zasláno: 21. 4. 2013, 22:11:32
juriad:
Díky moc:) přesně takhle jsem to myslel.. jen pro sychr...šlo by to udělat i v tom jQuery?#24 jde mě o tu plynulou animaci při otevírání a zavírání... ale pokud se ti nechce tak to nemusí bejt..jinač díky moc |
||
juriad Profil |
#30 · Zasláno: 21. 4. 2013, 22:34:15
aladin:
Asi tak? Mimochodem, opravdu tam chceš tu otravnou animaci? Nebylo by nakonec nejlepší zobrazit čas už při najetí myší na jméno? |
||
Téma pokračuje na další straně.
|
0