Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery]Kolorowanie wierszy w tabeli
Forum PHP.pl > Forum > Przedszkole
marcwars
Nie działa mi kolorowanie wierszy, próbowałem już różnych sposobów z jquery, ale lipa.
kod strony:
  1. <!DOCTYPE html>
  2. <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
  3. <script type='text/javascript' src='javascript.js'></script>
  4. <script type="text/javascript" src="jquery-1.7.1.js"></script>
  5.  
  6. <script type="text/javascript">
  7. $(function() {
  8. $("tr:even").addClass("striped");
  9. //$("table tr:nth-child(even)").addClass("striped");
  10. });
  11. </script>
  12. <link rel="stylesheet" type="text/css" href="style.css" />
  13. </head>
  14.  
  15. <form name='myForm'>
  16. Nazwa produktu: <input type='text' id='nazwa' /> <br />
  17. Cena produktu: <input type='text' id='cena' /><br />
  18. <input type='button' onclick='ajaxFunction()' value='Dodaj' />
  19. </form>
  20. <div id='ajaxDiv'>Your result will display here</div>
  21.  
  22. </body>
  23. </html>


W divie o id='ajaxDiv' wchodzi ajaksowany plik php- tutaj fragment od wstawiania tabeli:
  1. .....
  2. $display_string = '<table>';
  3. $display_string .= '<tr>';
  4. $display_string .= '<th>Produkt</th>';
  5. $display_string .= '<th>Cena</th>';
  6. $display_string .= '</tr>';
  7.  
  8. // Insert a new row in the table for each person returned
  9. while($row = mysql_fetch_array($result)){
  10. $display_string .= '<tr>';
  11. $display_string .= '<td>'.$row['nazwa'].'</td>';
  12. $display_string .= '<td>'.$row['cena'].'</td>';
  13. $display_string .= '</tr>';
  14.  
  15. }
  16. $display_string .= '</table>';
  17. echo $display_string;
  18. ?>


Nadmienię, że wszystko chodzi poprawnie, więc nie rozumiem skąd ten problem. Główka tabeli (th) "łapie kolor", ale co drugi wiersz już tego nie chce:(
Czy ktoś mi pomoże wskazując błąd
qrzysztof
Koloru nie łapie ale czy łapie klasę "striped"?

Bo sprawdziłem i u mnie łapie. Możliwe błędy:

1) klasa "striped" jest ale kod css jest zły (może coś innego nadpisuje kolor zdefiniowany w klasie "striped")
2) tr nie łapią klasy "striped" - zła ścieżka do jquery
3) błąd powoduje ajax - funkcja dodająca paski wykonuje się tylko po przeładowaniu strony, a ajax strony nie przeładowuje
r4xz
a nie lepiej zrobić to w css?

-edit-
pozwolę sobie jeszcze rozwinąć myśl - http://www.quirksmode.org/css/nthchild.html
a że stare IE tego nie chwyci - kto by się przejmował wink.gif
Prym
A po co jquery? zastosuj samego css'a:

linijka do dodania w pliku css:
co druga:
Kod
table tr:nth-of-type(2n) { cos tu z css}

lub parzyste:
Kod
table tr:nth-of-type(even) { cos tu z css}


u mnie działa wszędzie gdzie trzeba smile.gif
marcwars
Nie wiem, czy łapie klasę stripped - w źródle strony (korzystam z FF) nie ma tabeli (chociaż się wyświetla w zakładce).
Niepokoi mnie fakt, że nie chce się paskować, a nie używam IE (z wiadomych względów)- nie chodzi w IE też, ale w FF też co gorsza.
qrzysztof
Zainstaluj sobie dodatek Firebug do FF (przydatna rzecz). I rzuć jeszcze okiem na mojego posta wyżej. Prawdopodobnie chodzi o błąd z punktu 3).
marcwars
css podany przez Pryma chodzi w ff, ale nie w ie.
Tak czy siak dzięki, a czy ktoś wie, co jest nie tak z tym kodem z jquery?

Qrzysztof - a co to jest błąd z punktu 3? Bo niestety nie łapię...
qrzysztof
Cytat(qrzysztof @ 29.11.2011, 22:21:12 ) *
Koloru nie łapie ale czy łapie klasę "striped"?

Bo sprawdziłem i u mnie łapie. Możliwe błędy:

1) klasa "striped" jest ale kod css jest zły (może coś innego nadpisuje kolor zdefiniowany w klasie "striped")
2) tr nie łapią klasy "striped" - zła ścieżka do jquery
3) błąd powoduje ajax - funkcja dodająca paski wykonuje się tylko po przeładowaniu strony, a ajax strony nie przeładowuje

marcwars
Jeśli ajax, to trudno, padłem ofiarą własnego geniuszu (haha)- dzięki Qkrzysztof za info.
Ścieżka do jquery jest prawidłowa.

A css przesyłam dla ciekawości- wygląda ok:

  1. body,td {font-size: 14px;}
  2. table {background-color: black; border: 1px black solid; border-collapse: collapse;}
  3. th {border: 1px outset silver; background-color: maroon; color: white;}
  4. tr {background-color: #fff; margin: 1px;}
  5. tr.striped {background-color: #eee;}
  6. td {padding: 1px 8px;}


qrzysztof
Jeśli chciałbyś mimo wszystko to zrobić ajaxem to:

  1. <script type="text/javascript">
  2. $(function() {
  3. makeStripes();
  4. });
  5.  
  6. function makeStripes() {
  7. $("tr:even").addClass("striped");
  8. //$("table tr:nth-child(even)").addClass("striped");
  9. }
  10. </script>


I w kodzie javascript gdzie wstawiasz za pomocą ajaxa tę tabelę musisz po jej wstawieniu wykonać funkcję makeStripes() - to doda odpowiednie klasy do parzystych wierszy.

Ja też nie jestem za tym aby stawać na głowie by dogodzić ludziom używającym IE. Ale jeśli mogę to zrobić całkiem niewielkim kosztem, to - aczkolwiek niechętnie - robię smile.gif
marcwars
Wstawiam, ale dalej lipa, może źle wstawiam?

  1. //Browser Support Code
  2. function ajaxFunction(){
  3. var ajaxRequest; // The variable that makes Ajax possible!
  4.  
  5. try{
  6. // Opera 8.0+, Firefox, Safari
  7. ajaxRequest = new XMLHttpRequest();
  8. } catch (e){
  9. // Internet Explorer Browsers
  10. try{
  11. ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
  12. } catch (e) {
  13. try{
  14. ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
  15. } catch (e){
  16. // Something went wrong
  17. alert("Your browser broke!");
  18. return false;
  19. }
  20. }
  21. }
  22. // Create a function that will receive data sent from the server
  23. ajaxRequest.onreadystatechange = function(){
  24. if(ajaxRequest.readyState == 4)
  25. //get the info sent from server
  26. {
  27. var ajaxDisplay = document.getElementById('ajaxDiv');
  28. ajaxDisplay.innerHTML = ajaxRequest.responseText;
  29. }
  30. }
  31.  
  32. var nazwa = document.getElementById('nazwa').value;
  33. var cena = document.getElementById('cena').value;
  34. var queryString = "?nazwa=" + nazwa + "&cena=" + cena;
  35. ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
  36. ajaxRequest.send(null);
  37. }
  38.  
  39.  
  40. function makeStripes() {
  41. $("tr:even").addClass("striped");}
  42. $(function() {
  43. makeStripes();
  44. });
qrzysztof
[JAVASCRIPT] pobierz, plaintext
  1. // Create a function that will receive data sent from the server
  2. ajaxRequest.onreadystatechange = function(){
  3. if(ajaxRequest.readyState == 4)
  4. //get the info sent from server
  5. {
  6. var ajaxDisplay = document.getElementById('ajaxDiv');
  7. ajaxDisplay.innerHTML = ajaxRequest.responseText;
  8. makeStripes();
  9. }
[JAVASCRIPT] pobierz, plaintext
marcwars
Dzięki, teraz działa!
Pozdrawiam.
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.