Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][JavaScript][PHP]Wyszukiwarka wewnątrz tabeli, problem z rekordami
krzesik
post
Post #1





Grupa: Zarejestrowani
Postów: 519
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Witajcie,

mam problem z małą wyszukiwarką wewnątrz tabeli i późniejszym wyświetlaniem rekordów.

wyszukiwarka:

  1. function myFunction() {
  2. var input, filter, table, tr, td, i, txtValue;
  3. input = document.getElementById("myInput");
  4. filter = input.value.toUpperCase();
  5. table = document.getElementById("myTable");
  6. tr = table.getElementsByTagName("tr");
  7. for (i = 0; i < tr.length; i++) {
  8. td = tr[i].getElementsByTagName("td")[2];
  9. if (td) {
  10. txtValue = td.textContent || td.innerText;
  11. if (txtValue.toUpperCase().indexOf(filter) > -1) {
  12. tr[i].style.display = "";
  13. } else {
  14. tr[i].style.display = "none";
  15. }
  16. }
  17. }
  18. }
  19. <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Szukaj po numerze ..." title="Szukaj po numerze">
  20. <table class="table table-striped" id="myTable">
  21. <tr>
  22. <th>L.p.</th>
  23. <th style="text-align:left">Nazwisko</th>
  24. <th style="text-align:left">Nr</th>
  25. <th style="text-align:left">Rodzaj</th>
  26. <th style="text-align:left">Data</th>
  27. <th style="text-align:left;">Wartość</th>
  28. <th style="text-align:left;">Pozostało</th>
  29. ........
  30.  
  31. <? echo '<td data-label="Edytuj">';
  32. echo '<center><a href="#Edit" data-toggle="modal" title="Edytuj" data-target="#Edit'.$r['id'].'">
  33. <i class="fa fa-edit" style="font-size:24px;color:green; box-shadow: 0 0 10px #666;"></i></a></center>';
  34.  
  35. .............................
  36. ?>
  37. .............................



ale dalej w kodzie html, mam taką tabelkę, pojawia się po kliknięciu w ikonę edycji jako modal:

  1. ..........
  2.  
  3. echo '<table width="100%" class="wplaty">';
  4. echo '<thead>';
  5. echo '<tr class="wplaty">';
  6. echo '<th class="wplaty" style="font-size: 12px;">L.p.</th>';
  7. echo '<th class="wplaty" style="font-size: 12px;">Data wpłaty</th>';
  8. echo '<th class="wplaty" style="font-size: 12px;">Kwota</th>';
  9. echo '<th class="wplaty" style="font-size: 12px;">Przyjmujący</th>';
  10. echo '<th class="wplaty" style="font-size: 12px;">Uwagi</th>';
  11. echo '</tr>';
  12. echo '</thead>';
  13. echo '<tbody>';
  14.  
  15. while($p = mysqli_fetch_array($platnosci_))
  16. {
  17. $lp1++;
  18. if($p['Skasowano']=='1')
  19. {
  20. echo '<tr class="wplaty" style="background-color:Red; text-decoration: line-through;">';
  21. }
  22. else
  23. {
  24. echo '<tr class="wplaty" style="max-height: 25px;">';
  25. }
  26. echo '<td style="text-align:center; font-size: 12px;" class="wplaty" data-label="L.p.">'.$lp1.'</td>';
  27. echo '<td style="text-align:left; font-size: 12px;" class="wplaty" data-label="Data">'.$p['data_wplaty'].'</td>';
  28. echo '<td style="text-align:left; font-size: 12px;" class="wplaty" data-label="Kwota">'.$p['kwota'].'</td>';
  29. echo '<td style="text-align:left; font-size: 12px;" class="wplaty" data-label="Operator">'.$p['kto_dodal'].'</td>';
  30. echo '<td style="text-align:left; font-size: 12px; overflow-wrap: break-all;" class="wplaty" data-label="Uwagi">'.$p['UwagiR'].'</td>';
  31.  
  32. ......

Problem polega na tym, że jeśli kliknę w rekord bez wcześniejszego wyszukiwania go to wszystko jest OK, ale jeśli najpierw go wyszukam i kliknę to druga tabelka (dokładnie wynik pętli), się nie wyświetla. Proszę o pomoc....

Ten post edytował krzesik 6.01.2026, 22:53:11
Go to the top of the page
+Quote Post
ZenekN
post
Post #2





Grupa: Zarejestrowani
Postów: 424
Pomógł: 5
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Czy ten modal jest w środku <tr> albo <td> ?

Ten post edytował ZenekN 8.01.2026, 21:44:18
Go to the top of the page
+Quote Post
krzesik
post
Post #3





Grupa: Zarejestrowani
Postów: 519
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


tak jest zarówno w <tr> jak i w <td>
Go to the top of the page
+Quote Post
ZenekN
post
Post #4





Grupa: Zarejestrowani
Postów: 424
Pomógł: 5
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Problem jest dokładnie w tym miejscu:
[JAVASCRIPT] pobierz, plaintext
  1. tr = table.getElementsByTagName("tr")
[JAVASCRIPT] pobierz, plaintext


Musisz ograniczyć zmienną do zakresu tej tabeli w której chcesz filtrować:
[JAVASCRIPT] pobierz, plaintext
  1. const tr = document.querySelectorAll("#myTable > tbody > tr")
[JAVASCRIPT] pobierz, plaintext


Ogranicz selekcję do #myTable > tbody > tr albo przenieś modal poza tabelę (najlepiej zrobić oba).
Najlepiej nazwij zmienną na rows bo w ten sposób bardziej będziesz rozumiał logikę kodu.

[JAVASCRIPT] pobierz, plaintext
  1. const rows = document.querySelectorAll("#myTable > tbody > tr");
  2.  
  3. rows.forEach((row) => {
  4. const td = row.querySelector("td:nth-child(3)"); // 3 kolumna = Nr
  5. if (!td) return;
  6.  
  7. const txtValue = (td.textContent || td.innerText || "").toUpperCase();
  8. row.style.display = txtValue.includes(filter) ? "" : "none";
  9. });
[JAVASCRIPT] pobierz, plaintext


//edit
Gdy dokonujesz wyszukiwania skrypt „przefiltrowuje” także <tr> z tej drugiej tabeli (pętla while(...) w modalu) i ustawia im display: none. Potem otwierasz modal i widzisz pustkę, bo wiersze są nadal ukryte.


Ten post edytował ZenekN 10.01.2026, 10:26:35
Go to the top of the page
+Quote Post
Salvation
post
Post #5





Grupa: Zarejestrowani
Postów: 410
Pomógł: 74
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Ta tabela jest dynamiczna czy "wygenerowana" zostaje już taka na stronie? Bo jak zostaje, to nie ma sensu przeszukiwać `<table>` za każdym razem od nowa.
Wrzuć sobie $key => $value do jakiejś zmiennej i przy użyciu prostego `array.filter(...)` dostaniesz klucze, które później - po przemapowaniu na wiersze tabeli w HTML - już tylko podświetlisz albo wyświetlisz.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.01.2026 - 21:17