« 1 2 »
Autor Zpráva
aladin
Profil *
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>
CSS
<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> ';
Díky za radu
quatzael
Profil
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 *
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
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
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 *
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
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 *
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
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 *
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
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 *
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 *
ne,nejde to..ani se to nezobrazí..
quatzael
Profil
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 *
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
juriad:
jojo, teď jsem to chtěl opravit.. předběhl jsi mě..:o)
aladin
Profil *
ted mě to zas píše
TypeError: document.getElementsByClassName(...).style is undefined
preca1
Profil
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 *
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 *
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
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;
}
… tato funkce přepíná mezi třídami "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
Chamurappi:
<a onclick="console.log(sotek);" href="javascript:void(0);">sotek</a> // proměnná sotek obsahuje odkaz na div#sotek
<div id="sotek"></div>
Špatně sem to interpretoval. Zkopíroval sem zdrojovej kód z tý jeho stránky a něco testoval. Netušil sem, že sou všechny elementy s id přístupný přes window a to mě zmátlo.
aladin
Profil *
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
OK, je čas přestat blbnout. http://artique.cz/onclick.html
aladin
Profil *
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
aladin:
Asi tak? Mimochodem, opravdu tam chceš tu otravnou animaci?
Nebylo by nakonec nejlepší zobrazit čas už při najetí myší na jméno?
« 1 2 »

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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