Autor Zpráva
tatyalien
Profil
Dobrý večer, mám jeden problém, rozchodil jsem zobrazování / skrytí pomocí javascriptu na stránce, ale nevím, jak si mám "zapamatovat" stav....

Jde mě o toto:
Na stránce mám jeden combobox, kde si uživatel vybere zadat médium: a) Film b) Data, pokud si vybere Film, zobrazí se mu část na zadávání údajů do Filmu (titulky, jazyk, ...), pokud data, tak velikost, obsah atd...
Toto mě už funguje, ale pokud zadávám data a kliknu na tlačítko uložit, procházím ve skryptu data (php), zda je zadáno vše, pokud něco není, vracím uživateli předvyplněnou stránku s jeho datama a informuji ho, že něco nezadal... to se mě taky zobrazí, ale část, kterou měl zobrazenou (Film, nebo data) je schovaná a má zase vidět combobox na výběr... a toto bych chtěl nějak obejít, aby měl vidět formulář tak jak ho měl před odesláním.

Používám toto:
<script type="text/javascript">
function skryti(idecko){
    var el = document.getElementById(idecko);
    el.style.display = 'none';
}
function zobrazSkryj(idecko){
    var el=document.getElementById(idecko).style;
    el.display=(el.display == 'block')?'none':'block';
}
</script>
<script>
function vybraneBB(idecko){
       if (idecko == '0') {
        var el=document.getElementById('0').style;
        el.display='none';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='none';
       }
       else if (idecko == '1') {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='block';
        var el=document.getElementById('2').style;
        el.display='none';
       }
       else {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='block';
       }
}
</script>


a v html:
<select id='lbl_typB' onchange='vybraneBB(this.options[this.selectedIndex].value);' name='typB'><option value="0">Vyberte hodnotu</option>
<option value="1" selected>Film</option>
<option value="2">Data</option>
</select>
...
<div id="0">
<script>document.getElementById('0').style.display='none';</script>
<fieldset>
<legend>Společné hodnoty</legend>
...
</fieldset>
</div>

<div id="1">
<script>document.getElementById('1').style.display='none';</script>
<fieldset>
<legend>Film</legend>
...
</fieldset>
</div>

<div id="2">
<script>document.getElementById('2').style.display='none';</script>
<fieldset>
<legend>Data</legend>
...
</fieldset>
</div>
TomasJ
Profil
Jestli jsem pochopil správně, tak by to šlo udělat přes cookies, že by zůstalo po refreshi stránky otevřené pole, které má...
Já na to mám udělanou funkci v JS, z návodu Jak na Cookies na www.jpw.cz
function setcookie(name, value, expires){
var date = new Date();
date.setTime(date.getTime()+expires);
document.cookie = name+"="+value+";expires="+date.toGMTString();
}

Jde to vyřešit i v PHP...

Ve fci vybraneBB(idecko) máš chybu:
var el=document.getElementById('0').style;
atp. - mají tam být apostrofy nebo uvozovky
* Pokud nechceš proměnnou el jako globální, dej před 'el=' ještě 'var'
tatyalien
Profil
TomasJ
No rozhodavl jsem se, že bych v nejhorším zadávání dat rozdělil na 3 stránky... 1 na rozcesník a zbylé dvě na Film a poslední na Data...

Chybu opravím ve scriptu, ten jsem totiž kopíroval z webu...

ta tvá funkce setcookie ta nastavuje proměnnou name s hodnotou value + expirace... jestli chápu dobře. Jak pak v Javascriptu po refreshy stránky si vytáhnu tu hodnotu z cookie?

Abych pak udělal asi na konci načtené stránky
if cookie = "1" zobraz.. bla bla atd..

Tak jsem sesmolil toto, je to blbost nebo ne? Na localhostu se to tváří že jo, jen to zatím nemůžu otestovat v rachotě, doma to prubnu víc... asi si jen dám podmínku v php, zda nebyl zatím proveden post, tak abych odstranil proměnou z cookie, co myslíte?
// převzato od http://diskuse.jakpsatweb.cz

<script type="text/javascript">
function skryti(idecko){
    var el = document.getElementById(idecko);
    el.style.display = 'none';
}
function zobrazSkryj(idecko){
    var el=document.getElementById(idecko).style;
    el.display=(el.display == 'block')?'none':'block';
}
</script>
<script>
function vybraneBB(idecko){
       if (idecko == '0') {
        var el=document.getElementById('0').style;
        el.display='none';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='none';
       }
       else if (idecko == '1') {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='block';
        var el=document.getElementById('2').style;
        el.display='none';
       }
       else {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='block';
       }
       cookiee(idecko);
}
//přečte cookie
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;
}
//nastaví nebo smaže cookie po kliknití na onclick
function cookiee(idecko) {
  if (readCookie('zobrazit') == 1) {
    createCookie('zobrazit', '', -1);
  }
  else {
    createCookie('zobrazit', idecko, '7');
  }
}
//vytvoří cookie
function createCookie(name,value,days) {
    if (days) {//jsou li zadány dny
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000)); //zadá počet dnů platnosti cookie
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = ""; //pokud nejsou zadány dny, tak se cookie smaže se zavřením prohlížeče
    document.cookie = name+"="+value+expires+"; path=/";
}
</script>

<select id='lbl_typB' onchange='vybraneBB(this.options[this.selectedIndex].value);' name='typB'><option value="0" selected>Vyberte hodnotu</option>
<option value="1">Film</option>
<option value="2">Data</option>
</select>
...
<div id="0">
<script>document.getElementById('0').style.display='none';</script>
<fieldset>
<legend>Společné hodnoty</legend>
...
</fieldset>
</div>

<div id="1">
<script>document.getElementById('1').style.display='none';</script>
<fieldset>
<legend>Film</legend>
...
</fieldset>
</div>

<div id="2">
<script>document.getElementById('2').style.display='none';</script>
<fieldset>
<legend>Data</legend>
...
</fieldset>
</div>

<script>
if (readCookie('zobrazit') == '0') {
        var el=document.getElementById('0').style;
        el.display='none';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='none';
}
else if (readCookie('zobrazit') == '1') {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='block';
        var el=document.getElementById('2').style;
        el.display='none';
}
else if (readCookie('zobrazit') == '2') {
        var el=document.getElementById('0').style;
        el.display='block';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='block';
}
else {
        var el=document.getElementById('0').style;
        el.display='none';
        var el=document.getElementById('1').style;
        el.display='none';
        var el=document.getElementById('2').style;
        el.display='none';
}
</script>
TomasJ
Profil
tatyalien:
Snad jen, proč nastavuješ JavaScriptem dipslay:none; ?
viz:
<div id="2">
<script>document.getElementById('2').style.display='none';</script>
...

stačí udělat:
<div id="2" style="display:none;">...
tatyalien
Profil
Nastavuji to javascriptem protože, pokud má uživat javascript vypnutý, tak by se mu daný blok nezobrazil nikdy... takto pokud ho má vyplý, tak se mu jen ukáže celá stránka.

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:

0