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

Wysuwany box ze szczegółami pod tabelą.

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 8 kwietnia 2017 w JavaScript przez nielotweb Bywalec (2,240 p.)

Zrobiłem tabelę do której zamieściłem dane z bazy danych poprzez PHP. Jest kilka rekordów. Chcę zrobić tak że gdy kliknę na dany rekord to wysunie się pod danym rekordem ( tym którym kliknąłem ) box z szczegółowymi informacjami itd.

Czyli jest tabelka, klikam w dany rekord wysuwa się pod nim div czyli box z informacjami... jak to mogę osiągnąć? Próbuję w JS zrobić że po kliknięciu jednego pola wysunie się ten box ale problem w tym że box wysuwa się tylko pod pierwszym rekordzie..

Kod PHP:

foreach ($query as $value) {

  /** TABELA Z REKORDAMI **/
  echo '<div class="tabela-flexbox-rekord">';
    echo '<div class="tabela-rekord-element tabela-rekord-id tabela-rekord-wys">';
      echo $value['id'];
    echo '</div>';
    echo '<div class="tabela-rekord-element confirm tabela-rekord-zrodlo tabela-rekord-wys">';
      echo $value['photos'];
    echo '</div>';
    echo '<div class="tabela-rekord-element tabela-rekord-operacja tabela-rekord-wys">';
      echo $value['title'];
    echo '</div>';
    echo '<div class="tabela-rekord-element tabela-rekord-przyna tabela-rekord-wys">';
      echo $value['textads'];
    echo '</div>';
    echo '<div class="tabela-rekord-element tabela-rekord-pusty tabela-rekord-wys">';
        echo '<a href="#" class="buttonhv">P</a>';
    echo '</div>';
  echo '</div>';
  
  /** TEN BOX Z INFORMACJAMI CO MA SIĘ WYSUWAĆ **/
  echo '<div class="tabela-flexbox-informacje">';
      echo 'Zmienna';
  echo '</div>';

}

box który ma się wysuwać to div class "tabela-flexbox-informacje"..

KOD JS:

  document.querySelector('.tabela-flexbox-rekord').addEventListener('click', function() {
      document.querySelector('.tabela-flexbox-informacje').style.display = 'block';
  });

 

Jak to mogę osiągnąć? Z góry dziękuję!

2 odpowiedzi

+1 głos
odpowiedź 8 kwietnia 2017 przez dominik36 Początkujący (480 p.)
Moim zdaniem, querySelector dotyczy selektora css, skoro chciałbyś dostać się do div o klasie ".xxx" spróbuj z getElementsByClassName, ewentualnie getElementById('id').

Powodzenia ! :)
1
komentarz 8 kwietnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
metoda querySelector i querySelectorAll pobierają obecnie praktycznie wszystkie typowe selektory CSS. Metoda getElementById ma tę zaletę, że jest w praktyce szybsza od querySelector gdyż atrybuty ID są w pewnym uproszczeniu indeksowane przez przeglądarkę i łatwiej może je odnaleźć na stronie.

Metoda getElementsByClassName nie jest bezpośrednio zamiennikiem querySelector('.klasa') gdyż querySelector zwraca tylko jeden element, a nie pseudotablicę jak getElementsByClassName. Jeśli do metody querySelector('id') przekażesz ID, które występuje w HTML kilka razy to i tak metoda zwróci tylko pierwszy napotkany element.

Jest jeszcze jedna ważna kwestia. Metoda getElementsByClassName w przypadku braku dopasowania jakiegokolwiek elementu do szukanej klasy zwraca pustą pseudotablicę []. Metoda querySelector i querySelectorAll zwróci w tym wypadku wartość null. Ma to znaczenie gdyby zaszła potrzeba uzależnienia jakiegoś działania od tego, czy znaleziono elementy. Pusta tablica zostanie niejawnie przekonwertowana zawsze na TRUE co może rodzić pewne problemy np. w instrukcjach IF (dlatego lepiej jest w razie czego sprawdzać właściwość length takiej pseudotablicy). W przypadku querySelectorAll wartość null jest niejawnie konwertowana na false więc wszystko działa w sposób oczekiwany.
+1 głos
odpowiedź 8 kwietnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)

metoda querySelector('selektor CSS') pobiera tylko pierwszy napotkany element, więc w Twoim wypadku pierwszy div z klasą tabela-flexbox-rekord wygenerowany przez foreach. Do kolejnych div nie podpinasz obsługi zdarzenia 'click'.

Zapoznaj się z metodą querySelectorAll, która zwraca wszystkie elementy pasujące do danego selektora CSS. Uważaj jednak, bo metoda zwraca je nie w formie tablicy [Object Array] ale w formie NodeList. Zależnie od tego co chcesz dalej z tym robić to aby przekształcić na tablicę z metodami z Array.prototype możesz użyć np. formy:

elements = [...document.querySelectorAll('selector CSS')]

 

komentarz 8 kwietnia 2017 przez nielotweb Bywalec (2,240 p.)
Okej, rozumiem sprawdzę to! Dziękuję!

Podobne pytania

0 głosów
1 odpowiedź 826 wizyt
pytanie zadane 14 października 2017 w JavaScript przez michh123 Bywalec (2,790 p.)
0 głosów
1 odpowiedź 76 wizyt
pytanie zadane 23 października 2018 w JavaScript przez Michał Samolewski Bywalec (2,240 p.)
0 głosów
3 odpowiedzi 1,618 wizyt
pytanie zadane 11 lutego 2017 w HTML i CSS przez Vorex444 Dyskutant (9,610 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...