Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z getElementsByName
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
PKua
Witam,
mam taką funkcję:
Kod
function userdetails (id)
            {
                var detailrows = id.parent.parent.parent.parent.getElementsByName('details');
                var display = detailrows[0].style.display == 'none' ? '' : 'none';
                id.innerHTML = display == '' ? 'Mniej szczegółów' : 'Więcej szczegółów';
                for (var i = 0; i < detailrows.length; i++)
                    detailrows[i].style.display = display;
            }


i jak ją wywołuje link w stopce tabeli (href="java script:userdetails(this)" - bez spacji, nie wiem dlaczego sama się dodaje) to wywala błąd, że nie ma metody "parent". Wygląda na to, że this nie zwraca dobrego wskaźnika do obiektu. OCB? Próbowałem także w onclick - to samo.
PrinceOfPersia
Cytat
id.parent.parent.parent.parent.getElementsByName('details');

bo to nie jest zbyt elegancki kod. Lepiej pomyśl i napisz co chcesz zrobić, gdzie w twojej strukturze HTML masz element "details"?
PKua
Problem w tym, że id.innerHTML też nie istnieje...

'details' to wartość atrybutu name w każdym rzędzie tr w tabeli, który domyślnie jest ukryty. Takich tabelek jest kilkanaście, i wyglądają tak:
  1. $content = '<tr>
  2. <td class="header_cell" style="width: 90px; text-align: right;">Data<br />rejestracji</td>
  3. <td style="text-align: center;">'.implode ('<br />', explode (' ', $row['reg_timestamp'])).'</td>
  4. </tr>
  5. <tr>
  6. <td class="header_cell" style="text-align: right;">Ostatnia<br />wizyta</td>
  7. <td style="text-align: center;">'.implode ('<br />', explode (' ', $row['last_visit_timestamp'])).'</td>
  8. </tr>
  9. <tr>
  10. <td class="header_cell" style="text-align: right;">Ranga</td>
  11. <td style="text-align: center;">'
  12. .($row['rank'] ? '<span style="font-weight: bold; color: red;">Head Admin</span>' : '<span style="color: grey;">Użytkownik</span>').
  13. '</td>
  14. </tr>
  15. <tr>
  16. <td class="header_cell" style="text-align: right;">Respekt<br />na forum</td>
  17. <td style="text-align: center;">
  18. <span style="color: '.($row['forum_respect'] > 0 ? "#ADFF2F" : "red").'">'.$row['forum_respect'].'</span>
  19. </td>
  20. </tr>
  21. <tr>
  22. <td class="header_cell" style="text-align: right;">Respekt<br />na serwerze</td>
  23. <td style="text-align: center;">
  24. <span style="color: '.($row['server_respect'] > 0 ? "#ADFF2F" : "red").'">'.$row['server_respect'].'</span>
  25. </td>
  26. </tr>
  27. <tr name="details">
  28. <td class="header_cell" style="text-align: right;">Dodane<br />piosenki</td>
  29. <td style="text-align: center; padding: 0px;">
  30. <table>
  31. <tr class="header">
  32. <td><img src="images/tick.png" style="width: 16px; height: 16px;" /></td>
  33. <td><img src="images/cross.png" style="width: 16px; height: 16px;" /></td>
  34. <td><img src="images/sandglass.png" style="width: 12px; height: 16px;" /></td>
  35. </tr>
  36. <tr>
  37. <td>'.(int) $row['accsongs'].'</td>
  38. <td>'.(int) $row['rejsongs'].'</td>
  39. <td>'.(int) $row['waitsongs'].'</td>
  40. </tr>
  41. <tr>
  42. <td colspan="3"><strong>Razem '.(int)($row['accsongs'] + $row['rejsongs'] + $row['waitsongs']).'</strong></td>
  43. </tr>
  44. </table>
  45. </td>
  46. </tr>';
  47.  
  48. echo '<div style="display: inline-block; vertical-align: top;">'
  49. .CreateTable ($row['login'], $content, "", '<tr><td colspan="2"><a href="java script: userdetails(this);" - znowu forum mi spację wstawia sleep.gif>Więcej szczegółów</a></td><tr>', "width: 280px; margin: 15px;", "", "", !($userLogged && $_SESSION['uid'] == $row['uid']), 2).'
  50. </div>';


CreateTable tworzy tabelkę. Parametry to po kolej: tytuł, zawartość, nagłówek, stopka, styl tabeli, styl nagłówka, styl stopki, true/false czy używać alternatywnej kolorystyki dla belki tytułu, wartość colspan dla tytułu.

Zatem w drzewie DOM powinno to być tak: table > tfoot > tr > td > a. Dając to parent cofam się do table i szukam wszystkich rzędów z atrybutem name="details". Jednak id w ogóle nie wskazuje na a...

//edit:
Problem rozwiązany. Okazuje się, że getElementsByName działą tylko bezpośrednio dla document. Zamiast tego użyłem klas i wszystko śmiga wink.gif

DO ZAMKNIĘCIA
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.