Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] automatyczna tabela z mysql + ukrywanie i chowanie danych
Forum PHP.pl > Forum > XML, AJAX > AJAX
marczak
Witam.

Mam pewnien problem ze stworzeniem dynamicznej tabeli pobranej z bazy mysql.

Chcę mieć taką strukutórę znaczników:

  1.  
  2.  
  3. <table id="work">
  4.  
  5. <tr>
  6. <th>ID</th>
  7. <th>Tytył pracy</th>
  8. <th>Promotor</th>
  9. <th>Krótki opis</th>
  10. <th></th>
  11. </tr>
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. <tr>
  20. <td>:praca:</td>
  21. <td>:tytul:</td>
  22. <td>:promotor:</td>
  23. <td>:opis:</td>
  24. <td><div class="arrow"></div></td>
  25.  
  26. </tr>
  27. <tr>
  28. <td colspan="5">
  29.  
  30. <a href="#">Rezerwacja</a>
  31. <h4>Pełny opis</h4>
  32.  
  33. <ul>
  34. <li>Tytył pracy : Testowy Tytuł</li>
  35. <li>Promotor pracy: Testowy promotor</li>
  36. <li>Pełny opis: </br>asd</li>
  37. </ul>
  38.  
  39. </td>
  40. </tr>
  41.  
  42.  
  43. </table>


Następnię używam jquery aby chować to co znajduję się wewnątrz
  1. <td colspan="5">


Używając najtępującego kodu:
  1.  
  2. $(document).ready(function(){
  3.  
  4.  
  5. $("#work tr:odd").addClass("odd");
  6. $("#work tr:not(.odd)").hide();
  7. $("#work tr:first-child").show();
  8.  
  9. $("#work tr.odd").click(function(){
  10. $(this).next("tr").toggle();
  11. $(this).find(".arrow").toggleClass("up");
  12. });
  13.  
  14.  


I gdy mam statyczną tabelę taką jak wyżej to wszystko ładnie działa. Problem pojawia się gdy chcę sobię tą tabelkę zapełnić zawartością z mysql.

Robię to tak:

  1. <?php
  2.  
  3. /*
  4.  * To change this template, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. require_once 'function.php';
  8.  
  9.  
  10.  
  11. $con = connection();
  12. $sql = "
  13. SELECT *
  14. FROM praca
  15. ORDER BY id_praca";
  16.  
  17. $result = mysql_query($sql);
  18. $result = formatResult($result);
  19. mysql_close($con);
  20. $JSData=json_encode($result);
  21. echo $JSData;
  22.  
  23.  
  24. ?>


Funkcja zwracająca dane i konwertująca je do jsona. Dane będą pobierane przez jquery i wyświetlane na stronie.
Robię to tak:
  1. $.ajax({
  2. type: "POST",
  3. url: "LoadTable.php",
  4. dataType : 'json',
  5.  
  6. success : function(json) {
  7.  
  8. for(var i=0; i<json.length; i++){
  9.  
  10. var id = json[i]['id_praca'];
  11. var promotor = json[i]['id_promotor'];
  12. var tytul = json[i]['tytul'];
  13. var opisS = json[i]['opis_short'];
  14. var opisL = json[i]['opis_long'];
  15. var rezerwacja = json[i]['rezerwacja'];
  16.  
  17. var row = '<tr><td>'+id+'</td><td>'+tytul+'</td><td>'+promotor+'</td><td>'+opisS+'</td><td><div class="arrow"></div></td></tr>';
  18. row = row + '<tr><td colspan="5"><a href="#">Rezerwacja</a><h4>Pełny opis</h4><ul><li>Tytył pracy : Testowy Tytuł</li><li>Promotor pracy: Testowy promotor</li><li>Pełny opis: asda</li></ul></td></tr>';
  19.  
  20.  
  21.  
  22. $('#work').append(row);
  23. }
  24. }
  25. });


Tabela jest tworzona, jednak nie wygląda tak samo jak ta statyczna, chociaż wydaję mi się ze struktura jest identyczna. Po za tym jquery wogóle nie reaguje na zwijanie i rozwijanie dodatkowego wiersza.

Proszę o pomoc.
john_doe
nie reaguje bo w funkcji js powinieneś użyć .live('click', function).....
marczak
hm... zmodyfikowałem program do postaci:

  1.  
  2. <script type="text/javascript">
  3. $(document).ready(function(aa){
  4.  
  5.  
  6. $("#work tr:odd").addClass("odd");
  7. $("#work tr:not(.odd)").hide();
  8. $("#work tr:first-child").show();
  9. $("#work tr.odd").live("click", function(){ $(this).next("tr").toggle();
  10. $(this).find(".arrow").toggleClass("up"); });
  11.  
  12. $.ajax({
  13. type: "POST",
  14. url: "LoadTable.php",
  15. dataType : 'json',
  16.  
  17. success : function(json) {
  18.  
  19.  
  20.  
  21. var table = $('<table id="work" /></table>');
  22. var th = $('<tr><th>ID</th><th>Tytuł pracy</th></th><th>Promotor</th><th>Krótki opis</th><th></th></tr>');
  23.  
  24. table.append(th);
  25.  
  26. for(var i=0; i<json.length; i++){
  27.  
  28.  
  29. var id = json[i]['id_praca'];
  30. var promotor = json[i]['id_promotor'];
  31. var tytul = json[i]['tytul'];
  32. var opisS = json[i]['opis_short'];
  33. var opisL = json[i]['opis_long'];
  34. var rezerwacja = json[i]['rezerwacja'];
  35.  
  36. var td = $('<tr><td>' + id + '</td><td>' + tytul + '</td><td>' + promotor + '</td><td>' + opisS + '</td><td><div class="arrow"></div></td></tr><tr><td colspan="5">TEST</td></tr>');
  37.  
  38. table.append(td);
  39.  
  40.  
  41.  
  42.  
  43. }
  44. $('#tabelka').append(table);
  45.  
  46.  
  47. }
  48. });
  49.  
  50.  
  51. });
  52. </script>
  53. [html]


[/html]

Jednak część górna skryptu nie reaguje:

  1.  
  2. $("#work tr:odd").addClass("odd");
  3.  
  4. $("#work tr:not(.odd)").hide();
  5.  
  6. $("#work tr:first-child").show();
  7.  
  8. $("#work tr.odd").live("click", function(){ $(this).next("tr").toggle();
  9.  
  10. $(this).find(".arrow").toggleClass("up"); });


Jakiś pomysł?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.