• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z 5 odcinka kursu JS

Object Storage Arubacloud
+2 głosów
315 wizyt
pytanie zadane 11 lutego 2022 w JavaScript przez Jakub3kk Nowicjusz (170 p.)

Witam,
Jestem nowy w JavaScript i zmagam się z zadaniem z 5 odcinka kursu JS, a mianowicie uproszczenie zapisu tego kodu

var c0 = document.getElementById('c0');
var c1 = document.getElementById('c1');
var c2 = document.getElementById('c2');
var c3 = document.getElementById('c3');

var c4 = document.getElementById('c4');
var c5 = document.getElementById('c5');
var c6 = document.getElementById('c6');
var c7 = document.getElementById('c7');

var c8 = document.getElementById('c8');
var c9 = document.getElementById('c9');
var c10 = document.getElementById('c10');
var c11 = document.getElementById('c11');

c0.addEventListener("click", function() { revealCard(0); });
c1.addEventListener("click", function() { revealCard(1); });
c2.addEventListener("click", function() { revealCard(2); });
c3.addEventListener("click", function() { revealCard(3); });

c4.addEventListener("click", function() { revealCard(4); });
c5.addEventListener("click", function() { revealCard(5); });
c6.addEventListener("click", function() { revealCard(6); });
c7.addEventListener("click", function() { revealCard(7); });

c8.addEventListener("click", function() { revealCard(8); });
c9.addEventListener("click", function() { revealCard(9); });
c10.addEventListener("click", function() { revealCard(10); });
c11.addEventListener("click", function() { revealCard(11); });

Doszedłem do tego że można to (chyba) zrobić w pętli for i wymodziłem taki kod


function start()
{
    var c = "";

    for(i=0; i<11; i++)
    {
    c=document.getElementById('c'+i);
   
 
 
    c.addEventListener("click", function(){ alert('card'+i); });

    }
}

Problem polega na tym że nie ważne na jaką kartę w Gwencie klikne, pojawi się alert z numerem "11".
W jaki sposób zrobić tak, żeby szufladka "c" miała przypisane różne  wartośc i żeby po kliknięciu kolejnych kart pokazywało kolejne numery.
Liczę na pomoc
Pozdrawiam

4
komentarz 11 lutego 2022 przez Ehlert Ekspert (212,870 p.)
Jak chcesz się tego dobrze nauczyć to zmień kurs, bo ten to dramat.
1
komentarz 11 lutego 2022 przez VBService Ekspert (254,490 p.)

@Jakub3kk, Polecam np.

Kurs Javascript dla superbohaterów

1 odpowiedź

+2 głosów
odpowiedź 11 lutego 2022 przez VBService Ekspert (254,490 p.)
wybrane 12 lutego 2022 przez Jakub3kk
 
Najlepsza

Można to zrobić bez pętli korzystając z faktu, że w javascript "występuje mechanizm" Event Delegation

  const container = document.querySelector('.container');
  container.addEventListener('click', card);

  function card(e) {
    // if (e.target && e.target.nodeName == 'DIV' && !e.target.matches('.container'))
    if (e.target && e.target.nodeName == 'DIV' && !e.target.classList.contains('container'))
      alert('card'+e.target.id.replace('c',''));
  }

 

dla takiego przykładu

<style>
  .container div {
    border: 1px solid white;
    padding: 0.2em;
    cursor: pointer;
    transition: border-color 0.25s;
  }  
  .container div:hover {
    border-color: black;
  }
</style>
<div class="container">
  <div id="c0">c0</div>
  <p>Lorem ipsum</p>
  <div id="c1">c1</div>
  <div id="c2">c2</div>
  <div id="c3">c3</div>
  <p>Lorem ipsum</p>
  <div id="c4">c4</div>
  <div id="c5">c5</div>
  <div id="c6">c6</div>
  <div id="c7">c7</div>
  <div id="c8">c8</div>
  <div id="c9">c9</div> 
  <div id="c10">c10</div>
  <p>Lorem ipsum</p>
  <div id="c11">c11</div>
  <div id="c12">c12</div>
  <div id="c13">c13</div>
  <div id="c14">c14</div>
  <div id="c15">c15</div>
  <div id="c16">c16</div>
  <div id="c17">c17</div>
  <div id="c18">c18</div>
  <div id="c19">c19</div>
  <div id="c20">c20</div>  
</div>
<script>
  const container = document.querySelector('.container');
  container.addEventListener('click', card);

  function card(e) {
    // if (e.target && e.target.nodeName == 'DIV' && !e.target.matches('.container'))
    if (e.target && e.target.nodeName == 'DIV' && !e.target.classList.contains('container'))
      alert('card'+e.target.id.replace('c',''));
  }
</script>

 

A Twój kod popraw np. tak

  function start()
  { 
    for (let i=0; i<11; i++)
    {
      const c = document.getElementById('c'+i);
      // c.onclick = (e) => { alert('card'+e.target.id); }
      // c.addEventListener("click", ({target}) => { alert('card'+target.id); });
      // c.addEventListener("click", function(e) { alert('card'+e.target.id.replace('c','')); });
      // c.addEventListener("click", function(e) { alert('card'+e.target.id); });
      c.addEventListener("click", (e) => { alert('card'+e.target.id.slice(1)); }); 
    }
  }

lub

  function start()
  { 
    // document.querySelectorAll('[id^="c"]').forEach(...);

    document.querySelectorAll('div[id^="c"]').forEach((c) => {
      c.addEventListener("click", (e) => { alert('card'+e.target.id.replace('c','')); });
    })
  }

nawet

  function start()
  { 
    document.querySelectorAll('div[id^="c"]').forEach((c) => {
      c.setAttribute("onclick", "alert('card'+this.id.slice(1))");
    });
  }

 

Podobne pytania

0 głosów
1 odpowiedź 557 wizyt
0 głosów
1 odpowiedź 450 wizyt
pytanie zadane 31 marca 2018 w JavaScript przez xxx1990 Początkujący (490 p.)
0 głosów
2 odpowiedzi 304 wizyt
pytanie zadane 14 maja 2018 w JavaScript przez xxx1990 Początkujący (490 p.)

92,655 zapytań

141,546 odpowiedzi

319,984 komentarzy

62,024 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...