Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Zdarzenia onmouse i onclick
Forum PHP.pl > Forum > Przedszkole
pandaci
Witam

Chcę zrobić tabelkę która standardowo ma kolor1 po najechaniu ma kolor2 a po kliknięciu ma mieć kolor3 i w tym kolorze zostać póki nie zostanie kliknięta druga tabelka pod spodem.

onmouseover i onmouseout bez problemu w momencie kliknięcia też zmienia się kolor ale po zjechaniu z elementu wraca do poprzedniego.

Jak temu zapobiec?

  1. function ustaw(t,co)
  2. {
  3. var test = document.getElementById("tabela1");
  4. if(co==0)
  5. {
  6. test.className = "table";
  7. }
  8. if(co==1)
  9. {
  10. test.className = "tableHover";
  11. }
  12. if(co==2)
  13. {
  14. test.className = "tableClick";
  15. }
  16. }
  17.  
  18. <table width="282" height="52" border="0" class="table" id="tabela1"
  19. onmouseover="ustaw(this,1);"
  20. onclick="ustaw(this,2);"
  21. onmouseout="ustaw(this,0);">
  22.  
  23. <table width="282" height="52" border="0" class="table" id="tabela2"
  24. onmouseover="ustaw(this,1);"
  25. onclick="ustaw(this,2);"
  26. onmouseout="ustaw(this,0);">
  27.  


Jak zatrzymać kolor po zdarzeniu OnClick?

A jak możnabyłoby to rozwiązać jeżeli tabelka by tworzyła się w pętli?
athei
Coś podobnego ale w jquery http://jsbin.com/esero3
bastard13
Usuń sobie zdarzenie onmouseout z obu znaczników table, ponieważ w nim przypisujesz tabelce ponownie klasę 'table'.
Poza tym, taka rada na przyszłość, staraj się pracować raczej na div'ach niż na tabelach.
thomson89
A skąd wiesz do czego mu to? Może chce przedstawić dane tabelaryczne? Skoro tworzy tabelkę w pętli (lub chce) to tym raczej nie zrobi strony.
bastard13
Nie wiem, do czego jest mu to potrzebne, ale nie widzę przeszkód żeby na divach zbudować tabelę, problemem nie jest nawet zrobienie tego w pętli.
Jeżeli problem wymaga koniecznego zastosowania tabel, to niech przy nich zostanie, ale jeżeli może je zastąpić divami, to lepiej nabierać dobrych przyzwyczajeńsmile.gif
tehaha
Cytat(bastard13 @ 25.07.2010, 12:46:27 ) *
Jeżeli problem wymaga koniecznego zastosowania tabel, to niech przy nich zostanie, ale jeżeli może je zastąpić divami, to lepiej nabierać dobrych przyzwyczajeńsmile.gif

Chyba sobie żartujesz, dane tabelaryczne na divach?? Wybacz ale to jest właśnie typowe myślenie ludzi, którzy się gdzieś naczytali, że tabelki to przeżytek i trzeba ich unikać, a nic bardziej błędnego. Tabelek nie należy używać do budowania struktury strony, tylko do danych tabelarycznych. Dobre przyzwyczajenie to używać znaczników zgodnie z ich przeznaczeniem <h1>, <h2>... do nagłówków, <ul> dla list nieuporządkowanych, i <table> dla danych tabelarycznych, a nie wpychanie wszędzie <div> i setki klas...bo to jest właśnie złe przyzwyczajenie

Co do problemu autora to dla efektów takich jak zmiana koloru po najechaniu myszką służy css :hover,
co do kliknięcia to musisz zrobić tak, że po kliknięciu najpierw przywraca tabelkom klasę, reprezentującą stan przed kliknięciem i potem ustawia klasę aktywną dla tabelki klikniętej.
bastard13
Faktycznie, nie pomyślałem, nim napisałem:)
pandaci
Cytat
co do kliknięcia to musisz zrobić tak, że po kliknięciu najpierw przywraca tabelkom klasę, reprezentującą stan przed kliknięciem i potem ustawia klasę aktywną dla tabelki klikniętej.


Mógłbyś opisać na moim przykładzie, gdyż próbuje ale coś nie wychodzi mi tak jak powinno.

bastard13
Usuń akcję onmouseout, ponieważ w niej przywracasz pierwotną klasę tabelki.
pandaci
Ok. Ale co w przypadku gdy najadę na daną tabelę a nie kliknę? Nie wróci do stanu standardowego. Jak to rozwiązać wtedy?
bastard13
To nie usuwaj akcji onmouseout tylko przerób if'a, który się wtedy wywołuje w ten sposób:
  1. if(co==0)
  2. {
  3. if(test.className == "tableClick")
  4. return; //wychodzi jeżeli już kliknąłeś w tabelkę i ustawiłeś jej klasę tableClick
  5. test.className = "table";
  6. }
tehaha
Cytat(pandaci @ 25.07.2010, 23:35:31 ) *
Mógłbyś opisać na moim przykładzie, gdyż próbuje ale coś nie wychodzi mi tak jak powinno.


przeanalizuj sobie ten prosty przykład(skopiuj kod, zapisz do pliku i odpal):
  1. <style type="text/css">
  2. table
  3. {
  4. border: solid #000000 1px;
  5. width: 200px;
  6. height: 100px;
  7. }
  8. table:hover
  9. {
  10. border: solid #ff0000 1px;
  11. }
  12. table.active
  13. {
  14. border: solid #ff00aa 2px;
  15. }
  16. <script type="text/javascript">
  17. function activate(id)
  18. {
  19. for(i=1;i<=3;++i)
  20. {
  21. document.getElementById('table_'+i).className = '';
  22. }
  23. document.getElementById(id).className = 'active';
  24. }
  25. <div>
  26. <table cellpadding="0" cellspacing="0" id="table_1" onclick="activate(this.id)">
  27. <tr>
  28. <td>Tabelka 1</td>
  29. </tr>
  30. </table>
  31. </div>
  32. <div>
  33. <table cellpadding="0" cellspacing="0" id="table_2" onclick="activate(this.id)">
  34. <tr>
  35. <td>Tabelka 2</td>
  36. </tr>
  37. </table>
  38. </div>
  39. <div>
  40. <table cellpadding="0" cellspacing="0" id="table_3" onclick="activate(this.id)">
  41. <tr>
  42. <td>Tabelka 3</td>
  43. </tr>
  44. </table>
  45. </div>

1. standardowo tabelka ma obrys czarny
2. po najechaniu myszką - obrys czerwony
3. po kliknięciu - obrys pomarańczowy
- efekt po najechaniu myszką można łatwo ustawić przez css :hover
- co do kliknięcia to posługujemy się tu nadawaniem klasy .active, która reprezentuje stan aktywny, czyli ten z obrysem pomarańczowym, po kliknięciu na jakąś tabelę, wpierw pętlą for() usuwamy klasy przypisane do tych tabel, następnie dla tabeli klikniętej ustawiamy klasę aktywną
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.