Autor Zpráva
aladin
Profil *
zdravím,
potřebuju poradit..
udělal jsem si div,takovou informační tabuli..kterou po kliknutí na křížek tu tabuli odstraní
zde je kod:
<div id="tabule" style="display:block;">Informace  
<a href="#" onclick="document.getElementById('id').style.display = 'none';"><img src="images/up.png"></a>
</div>
problém je v tom,že po přejití na jinou stránku,nebo F5 se ta tabule znovu objeví...
jak udělat aby se ta tabule neukazovala do tý doby než vypne prohlížeč/panel..a když zas příjde na tu stránku tak aby se ta tabule znovu ukázala?
jediný mě napadlo cookie,ale v tomhle moc dobrej nejsem..já spíš přes session...ale tohle přes session nepujde podle mě.
Můžete mě prosím poradit?děkuji
jenikkozak
Profil
aladin:
ale tohle přes session nepujde podle mě.
Šlo by to. Pomocí AJAXu bys ale musel serveru sdělit, že uživatel klikl na ten odkaz.
Nebo udělat ten odkaz klasicky klikací, na serveru uložit sessionu o tom, že uživatel chce informaci schovat.

Ovšem samotné uložení cookie v JS je jednoduché: Uložení cookie javascriptem. A číst ji pak můžeš na serveru, kde se s ní v PHP pracuje stejně jako se sessionou, až na to, že jde o pole $_COOKIE.
aladin
Profil *
no,a jak to dosadím aby to..bylo uložený?a navíc..tam to je udělaný na dny..já bych to potřeboval udělat že pokud ten panel/prohlížeč zavře,a pak to tam znova dá tu stránku tak aby se to ukázalo znova...
jenikkozak
Profil
aladin:
Pokud při ukládání nastavíš expiraci na nulu nebo ji nenastavíš vůbec, smaže se cookie při zavření okna prohlížeče sama.
aladin
Profil *
takže by to mělo vypadat následovně?
<script>

var id=document.getElementById('tabule').style.display = 'none';
var dnu = ;
var datum= new Date();

function hide()
{
datum.setTime(datum.getTime() + 1000 * 60 * 60 * 24 * dnu);
document.cookie = "id;expires=" + datum.toGMTString();
}
</script>



<div id="tabule" style="display:block;">Informace  
<a href="#" onclick="hide()><img src="images/up.png"></a>
</div>
možná se už asi směješ to vyvádím..ale já opravdu už nevím :D js moc nedělám takže se ho snažím co nejvíce omezit :D
jenikkozak
Profil
Jako základ můžeš mít toto:
<script>
function hide(){
    document.getElementById('tabule').style.display = 'none';
    document.cookie = "id=hidden";
}
</script>
 

<div id="tabule" style="display:block;">Informace  
<img src="images/up.png" onclick="hide()">
</div>
Skryje ti to daný prvek a uloží cookii na dobu relace (která bývá do uzavření okna prohlížeče, ale nemusí to být pravidlem).
aladin
Profil *
no,ještě jsem si to upravil podle sebe,a zjistil jsem že to i tak nejde..
není blbě v tom ukládání do cookie?
document.cookie = "id=hidden";
aladin
Profil *
už vyřešeno.. díky :)
aladin
Profil *
tak ne,nevyřešeno...ten cookie trvá dlouho než se objeví..(zatím se mě ještě neobjevil)
když zavřu panel,pak znova spustím tak se to neukáže...

    <body onload="checkCookie()">
        <script>
            function getCookie(c_name){
                var i,x,y,ARRcookies=document.cookie.split(";");
                for (i=0;i<ARRcookies.length;i++)
                {
                    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
                    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
                    x=x.replace(/^\s+|\s+$/g,"");
                    if (x==c_name)
                    {
                        return unescape(y);
                    }
                }
            }
 
            function setCookie(c_name,value,exdays){
                var exdate=new Date();
                exdate.setDate(exdate.getDate() + exdays);
                var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
                document.cookie=c_name + "=" + c_value;
            }
            function checkCookie(){
                if(getCookie("hidden") == "true"){
                    document.getElementById('tabule').style.display = 'none';
                }
            }
            function hide(){
                document.getElementById('tabule').style.display = 'none';
                setCookie("hidden", "true");
            }
        </script>
 
        <div id="tabule"  style="display:block;">
            <div class="warning">
                <img src="http://cdn1.iconfinder.com/data/icons/realistiK-new/48x48/apps/error.png">
            </div>
 
            <div class="text">
                Informace který po kliknutí zmizí!!! WHOO WHOO WHOOO
            </div>  
 
            <div class="krizek">
                <img src="http://forum.fakaheda.eu/mchat/error.gif" onclick="hide()">
            </div>
        </div>
    </body>
_es
Profil
aladin:
A kde nastavuješ dobu exspirácie, ako ti radil jenikkozak?
aladin
Profil *
však tu psal že pokud se nastaví na 0 nebo vůbec tak by se to mělo smazat po zavření okna ne?
_es
Profil
aladin:
však tu psal že pokud se nastaví na 0 nebo vůbec
V riadku 19 je:
exdate.setDate(exdate.getDate() + exdays);
Argument-premenná exdays má hodnotu undefined a jej súčet s nejakým číslom dá výsledok NaN. jenikkozak ti neradil použiť na nastavenie cookie hentú funkciu.
aladin
Profil *
tak..ted jsem z toho jelen.. :D takže...exdays mám přiřadit null nebo to kompletně odstranit?
_es
Profil
aladin:
exdays mám přiřadit null
Neviem odkiaľ si tú funkciu setCookie zobral a nechce sa mi ju analyzovať - vyzerá nejako „pofidérne“ - ako by ju písal nejaký svojrázny programátor. Vieš si snáď nájsť vyhľadávačom plno iných spôsobov nastavenia cookie cez JS, alebo vyskúšať aj na hentej, čo spraví, keď zmeníš parameter - vyzerá to, že naozaj nezvyklo očakáva null.


aladin:
S tou funkciou ani s jej argumentmi asi problém nebude. Premyslel si si vôbec poriadne logiku tej aplikácie? Vyzerá to, že vlastne nevieš čo chceš - najprv ti vadí, že sa to zobrazuje, potom, že nezobrazuje.

ten cookie trvá dlouho než se objeví..(zatím se mě ještě neobjevil)
Čo sa neobjavuje ten <div>, či ako sa má „cookie objaviť“?

když zavřu panel,pak znova spustím tak se to neukáže...
To je predsa očakávané chovanie - nie? Skúsil si zavrieť všetky okná prehliadača a potom ho znova spustiť?
aladin
Profil *
_es:
funkce má být taková:
uživatel příjde na stránku,a ukáže se mu informační tabule...Kde budou různé informace apod..
v tý tabuli bude křížek kterej po kliknutí tabuli schová,a bude schovaná tak dlouho,než neodejde ze stránky.
až pak znova příjde,tak se ta tabule znova ukáže.

tedka jsem skusil něco jinýho..konstrukce zůstává stejná..

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-26707783-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();


  function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

</script>
    <div id="tabule" 
         style="text-align:center;        
               background-color:#fff;
                border:1px solid red;
                margin-top:2px;
                width:500px;
                margin:5px auto;
                font-size:17px;
                padding:10px;">  
          <span style="color:#000;
                       display:inline-block;
                       padding-right:4px;
                       float:right;
                       font-size:30px;" 
                onclick="createCookie('table',1,100);
                         getElementById('tabule').style.display='none'"> ˟ 
          </span> 
         informace
    </div> 

ale stejně se to neuloží aby to bylo schovaný..
preca1
Profil
Úplně stejný funkce na práci s cookies používam i já, takže vím, že fungujou.
Tvůj problém je zřejmě ten, že když vykresluješ ten div, tak nekontroluješ, jestli má ten element bejt schovanej. Neboli nekontroluješ, jestli už je tam nastavená ta cookie. To můžeš udělat buď v PHP (lepší), nebo v JS (ne tak dobrý, jelikož JS nemusí bejt zapnutej).
jenikkozak
Profil
preca1:
To můžeš udělat buď v PHP (lepší), nebo v JS (ne tak dobrý, jelikož JS nemusí bejt zapnutej).
Bez JS v současné podobě nemůže uživatel tabulku skrýt a je málo pravděpodobné, že by během jedné relace nastavení JavaScriptu měnil.

aladin:
když zavřu panel,pak znova spustím tak se to neukáže...
Dej si při testování pozor na to, jak dlouho trvá ta relace. Záleží na nastavení prohlížeče. Pokud zavřeš jednu záložku (panel, tab) a okno prohlížeče necháš otevřené, relace v prohlížečích (ve výchozím nastavení) zůstává zachována.
A pokud máš v prohlížeči nastavené zachování relace (bývá to spojeno s obnovováním otevřených záložek - tedy s nastavením, zda se má po zapnutí prohlížeče otevřít nová záložka nebo ty otevřené naposledy), tak se ti ta dočasná cookie nesmaže ani při zavření okna prohlížeče. (Myslím, že záleží na tom, za jak dlouho prohlížeč znovu spustíš, nevím, nezkoumal jsem to.)
_es
Profil
aladin:
bude schovaná tak dlouho,než neodejde ze stránky.
až pak znova příjde,tak se ta tabule znova ukáže.
Problém bude asi v tom definovať, čo znamená „odísť zo stránky“ a „prísť na stránku“. Keď navštívim stránku, potom zadám v tom istom okne/karte inú adresu a potom sa na stránku vrátim späť došlo k „odídeniu“ a „prídeniu“ na stránku? A iné podobné prípady? Ak ti nevyhovuje riešenie cez cookie, musíš si vymyslieť nejaké iné.

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: