Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]Zdarzenia onmouse i onclick
pandaci
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 13.04.2007

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


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?
Go to the top of the page
+Quote Post
athei
post
Post #2





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

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


Coś podobnego ale w jquery http://jsbin.com/esero3
Go to the top of the page
+Quote Post
bastard13
post
Post #3





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


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.

Ten post edytował bastard13 25.07.2010, 11:30:00
Go to the top of the page
+Quote Post
thomson89
post
Post #4





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
bastard13
post
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


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ń(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tehaha
post
Post #6





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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ń(IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
bastard13
post
Post #7





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Faktycznie, nie pomyślałem, nim napisałem:)
Go to the top of the page
+Quote Post
pandaci
post
Post #8





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 13.04.2007

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


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.

Go to the top of the page
+Quote Post
bastard13
post
Post #9





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Usuń akcję onmouseout, ponieważ w niej przywracasz pierwotną klasę tabelki.
Go to the top of the page
+Quote Post
pandaci
post
Post #10





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 13.04.2007

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


Ok. Ale co w przypadku gdy najadę na daną tabelę a nie kliknę? Nie wróci do stanu standardowego. Jak to rozwiązać wtedy?
Go to the top of the page
+Quote Post
bastard13
post
Post #11





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


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. }
Go to the top of the page
+Quote Post
tehaha
post
Post #12





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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ą

Ten post edytował tehaha 26.07.2010, 00:35:59
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: 23.08.2025 - 05:11