Zobrazení divu JSkem je až napodruhé

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Zbynas 9. 9. 2019 07:56

Na hrefu mám na onclicku volání následující funkce. Jenže někdy musím kliknout dvakrát, než se zobrazí skrytý div. Proč? U málokterých skrytých to jde napoprvé, ale většinou až napodruhé :(

Pokud je situace opačná a div je zobrazený a klikem se má skrýt, tak většinou vždy až na podruhé ...

Kód: Vybrat vše
function showhide(idecko) {
  var x = document.getElementById(idecko);
  if (x.style.display === "none") {
    x.style.display = "block";
  } else {
    x.style.display = "none";
  }
}


Konkrétně se jedná třeba o:

Kód: Vybrat vše
        <livechat>
        <!--LIVECHAT-->
        <div class="livechat">
            !livechat!
            <livechat_popup>
             <div class="livechat-popup" id="livechat-popup">
                !livechat_popup!
             </div>
             </livechat_popup>
               
             <livechat_button>   
             <div class="livechat-button">
                !livechat_button!
             <p><a onclick="showhide('livechat-popup'); switchchat();"><img src="graphic/livechat.png">Živá podpora</a></p>
             </div>
             </livechat_button>
        </div>
        <!--/LIVECHAT-->
        </livechat>


CSS:
Kód: Vybrat vše
.livechat-popup{
   border: 3px outset rgb(150,150,150);
   background: rgb(255,255,255,0.7);
   width: 500px;
   display: none;
   clear: right;
   margin-bottom: 10px;
   padding: 10px 20px;
   }


Ještě funkce switchchat:

Kód: Vybrat vše
    function switchchat(){
    showchat = getCookie("showchatbox");
        if (showchat==""){
            document.cookie = "showchatbox=none";
            showchat = "none";
         }
         
         if (showchat=="none"){
         document.cookie = "showchatbox=show";
         showchat = "show";
         } else {
         document.cookie = "showchatbox=none";
         showchat = "none";
         }
    }
   
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Emil Pastelka 9. 9. 2019 14:57

Napadá mne jen, že máte JS nad HTML. Pokud voláte ID, měl by být JS vždy až za HTML - ve smyslu čtení kódu shora dolů. Tedy
<html>
<head></head>
<body></body>
</html>
<script>
</script>
Emil Pastelka
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 9. 9. 2019 16:38

Aha, díky moc za tip, mám script hned za tagem body. Zkusím ho dát na konec :)
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 9. 9. 2019 19:16

No, tak nejen, že to nezabralo, ale dokonce to znefunčnilo ajax v tom divu a nezobrazilo to dalších pár divů, který zobrazuje javascript až po načtení stránky. Lol. :) PS: skrývání / odkrývání zůstalo funkční, ale pořád se stejným problémem - až na druhý klik.
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 9. 9. 2019 19:59

CSS patří do sekce HEAD jako link a JS patří na konec stránky - nikoli za sekci HTML.
Takto se to používá z důvodu rychlosti načítání.

Nicméně ani jedno z uvedených příkladů na JS není AJAX.
Ještě bych zkusil hodit očko na rozdíl "=" "==" a "==="

Asi bych se nesnažil znovu objevovat kolo a rovnou využil jQuery a $.toggle
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 15. 9. 2019 15:40

ano css mám v head jako link.
Ajaxové skripty jsem sem nedávál, protože kus stránky, kde řeším zmiňovaný problém, není
načítaná ajaxem, i když ní ajaxový odkaz je, ale imho to nemá vliv.

Nechci objevovat S.toggle ani nic podobného, když chci pochopit JS.
NVidia GTX 580, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 15. 9. 2019 18:30

Tak pro začátek zkus používat konzoli.

Prostým výpisem
Kód: Vybrat vše
console.log(x.style.display);

jsem zjistil, že prvotní stav je "".

A tady je vysvětlení
https://stackoverflow.com/questions/167 ... stylesheet

A ještě prostudovat porovnávání
https://www.w3schools.com/js/js_comparisons.asp
Just_jo
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků