Autor Zpráva
Dr.P.Pa
Profil
Na stránku jsem umístil scritp, který po odkliknutí odpočítává čas do zobrazení dalšího textu (řešení úlohy).
Na jedné stránce ovšem není možné umístit více, než jeden - pak se začnou odpočty navzájem přepisovat a zkrátka u dalšího zadání už script nefunguje správně.
Jak bych mohl nastavit opakování funkce?
Díky za radu :-)

<script>
function countToShow(timeInSeconds) {

  var countdownElement = document.getElementById('countdown');
  var contentElement = document.getElementById('r_content');
  var adsElement = document.getElementById('ads');
  var remainingSeconds = timeInSeconds;

  adsElement.style.display = '';
  countdownElement.innerHTML = remainingSeconds;

  var interval = setInterval(function() {

    countdownElement.innerHTML = --remainingSeconds;

    if (remainingSeconds === 0) {
      clearInterval(interval);
      contentElement.style.display = '';
      adsElement.style.display = 'none';
    }

  }, 1000);
}


</script>




<div id="container">
<a href="#0" onclick="countToShow(30)"><strong>ŘEŠENÍ</strong></a>
<div id="ads" style="display: none">
<div id="countdown"></div>&nbsp;
</div>
<div id="r_content" style="display: none">
Keeehi
Profil
Základem je použít jinou identifikaci než na základě IDček. Ty musí být v rámci stránky unikátní.
Případně se dají IDčka zachovat ale ta funkce countToShow musí přijímat jejich unikátní jména.
Dr.P.Pa
Profil
Ano, zkoušel jsem vytvořit unikátní id, ale pár se to chovali stejně ☹️
Jakou jinou identifikaci bych mohl použít?
Tomášeek
Profil
Dr.P.Pa:
Jakou jinou identifikaci bych mohl použít?
Kontextové zaměření v DOMu.

zkoušel jsem vytvořit unikátní id, ale pár se to chovali stejně ☹️
Zkoušel jsi špatně.
Dr.P.Pa
Profil
Tomášeek:
Ano, zkoušel jsem špatně... To jsem tak nějak věděl...
Ale sem jsem to nepsal proto, abych se dozvěděl, že jsem blbej, ale abych se dozvěděl, jak to udělat správně :-)
Díky za tvůj čas...
lionel messi
Profil
Dr.P.Pa:
Ale sem jsem to nepsal proto, abych se dozvěděl, že jsem blbej, ale abych se dozvěděl, jak to udělat správně :-)

To si sa aj dozvedel:

Keeehi:
Ty musí být v rámci stránky unikátní.
Případně se dají IDčka zachovat ale ta funkce countToShow musí přijímat jejich unikátní jména.

Tomášeek:
Dr.P.Pa:
„Jakou jinou identifikaci bych mohl použít?“
Kontextové zaměření v DOMu.

K rade od Tomášeek dodám ešte malé postrčenie: querySelector.

To, ako si to [#3] skúšal, sa nikto z nás nedozvedel, keďže jediný tvoj výstup, ktorý si pridal sem, obsahuje nedostatky, na ktoré ťa kolegovia upozornili.

Keby si namiesto zbytočného príspevku [#5] dodal čosi konštruktívnejšie (prepracovaný kód alebo ideálne živú ukážku), zvýšil by si svoju šancu posunúť sa vpred. Takto prešľapuješ na mieste a ochota ostatných poradiť ti postupne klesá.
Dr.P.Pa
Profil
lionel messi:
Nejsem si úplně jistej, proč ztrácíš čas psaním takovýchto příspěvků. Myslím, že je zřejmé, že NEVÍM jak správně ID upravit, aby to běželo správně a že netuším, jak použít kontextové zaměření v DOMu. Odpovědi typu "Děláš to špatně" jsou hloupé a nikam diskusi neposouvají. A když napíši, že nevím, tak očekávám alespoň trochu konkrétnější odpověď. A nebo žádnou, pokud je to pod tvou úroveň... POkud si hoši potřebujete dokázat, kolik toho umíte, tak jo - JSTE FAKT DOBŘÍ A MOC VÁM GRATULUJI.
Já si teď odskočím někam jinam, kde se snad najde někdo, kdo bude méně machrovat a bude chápat, že někdo, kdo se "hloupě ptá" není blbeček, ale jen někdo, kdo se v této oblasti pohybuje jen málo - a tedy je třeba s ním hovořit poněkud více na jeho úrovni... Tedy jako s někým neinformovaným, nikoli jako s blbcem...
Keeehi
Profil
Dr.P.Pa:
Ano, zkoušel jsem vytvořit unikátní id, ale pár se to chovali stejně ☹️
No to by nemělo. Asi si to někde omylem přepisuješ. Ovšem potřebujeme vidět, jak jsi to zkoušel a pak ti můžeme říct, kde máš tu chybu.
Dr.P.Pa
Profil
Keeehi:
Moc děkuji za odpověď. Vycházel jsem z toho, že přepíši názvy ID v obou částech - tedy přidal jsem čísla k ID takto:

<script>
function countToShow(timeInSeconds) {
 
  var countdownElement = document.getElementById('countdown1');
  var contentElement = document.getElementById('r_content1');
  var adsElement = document.getElementById('ads1');
  var remainingSeconds = timeInSeconds;
 
  adsElement.style.display = '';
  countdownElement.innerHTML = remainingSeconds;
 
  var interval = setInterval(function() {
 
    countdownElement.innerHTML = --remainingSeconds;
 
    if (remainingSeconds === 0) {
      clearInterval(interval);
      contentElement.style.display = '';
      adsElement.style.display = 'none';
    }
 
  }, 1000);
}
 
 
</script>

a dále v druhé části

<div id="container1">
<a href="#0" onclick="countToShow(30)"><strong>ŘEŠENÍ</strong></a>
<div id="ads1" style="display: none">
<div id="countdown1"></div>&nbsp;
</div>
<div id="r_content1" style="display: none">


A k druhému zadání na totožně, jen s další číslovkou samozřejmě. Nejspíš je to úplná blbost, ale prostě to fakt nevím :-(
Kajman
Profil
To by se musela i přejmenovat ta funkce, aby se nepřepsala ta původní. Ale lepší bude ten druhý způsob - tedy ta id předat jako parametry jedné společné funkci.

Živá ukázka

Ještě lepší by bylo zmíněné "Kontextové zaměření v DOMu", ale pro začátečníka je řešení s různými id sice pracnější, ale snáze aplikovatelné.
Tomášeek
Profil
Dr.P.Pa:
že netuším, jak použít kontextové zaměření v DOMu.
A co takhle si zkusit o tom kontextu něco přečíst?

Odpovědi typu "Děláš to špatně" jsou hloupé a nikam diskusi neposouvají.
Ovšem tvoje lenost to také nikam neposouvá. A snažit by ses měl zejména ty, my s tím JS problém nemáme.
Dr.P.Pa
Profil
Kajman:
Díky.
Zajímavé ježe to v této ukázce odpočítává, zatímco na mé stránce ne :-( - mozkolam.cz/?p=5586&preview=true
Jinak zatímco ukázka dopočítá do nuly, měl by se po odečtení zobrazit text - viz například zde: mozkolam.cz/slovni-hlavolamy/logicke-ulohy/pravda-a-lez/pandorina-skrinka
Kajman
Profil
Preview odkaz bude jen pro administrátory. Zkuste si odkaz otevřít v anonymním okně, ať vidíte, co my.
Dr.P.Pa
Profil
Kajman:
Pardon, mozkolam.cz/mozkolam/double-solution
Kajman
Profil
Konzole v prohlížeči (F12) hlásí nesmysly...

function countToShow(timeInSeconds, countdownId, contentId, adsId) {</p>
<p>  var countdownElement = document.getElementById(countdownId);
  var contentElement = document.getElementById(contentId);
  var adsElement = document.getElementById(adsId);
  var remainingSeconds = timeInSeconds;</p>
<p>  adsElement.style.display = '';
  countdownElement.innerHTML = remainingSeconds;</p>
<p>  var interval = setInterval(function() {</p>
<p>    countdownElement.innerHTML = --remainingSeconds;</p>
<p>    if (remainingSeconds === 0) {
      clearInterval(interval);
      contentElement.style.display = '';
      adsElement.style.display = 'none';
    }</p>
<p>  }, 1000);
}
Kajman
Profil
Asi si tu funkci dejte, k té předešlé a novou úpravu přejmenujte, nebo tam nechte jednu a udělejte tam podporu pro nevyplněné parametry, aby se použily ty dřívější...
document.getElementById(countdownId || 'countdown');
atp.
Dr.P.Pa
Profil
Ano, omlouvám se - nyní jsem to upravil, a už se to chová stejně, jako na Vaší ukázkové stránce :-)
Jen se po dopočítání nezobrazí další text (tedy řešení), ale jen se dopočítá do nuly.
Jsem si vědom, že se ptám opravdu blbě, ale prostě to neumím :-(

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