Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MooTools] przekazanie this do zdarzenia
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
phpion
Witam,
chcę sobie napisać prościutki system zakładek ale utknąłem w pewnym miejscu i nie bardzo wiem jak to rozegrać:
Kod
var Tabs = new Class({
    initialize: function(menu, content) {        
        this.menu = menu;
        this.content = content;
        
        $(this.content).getChildren().setStyle("display", "none");

        $(this.menu).getElements("a").addEvent("click", function(e){
            e.stop();
        
            // tu mam problem
        });
    }
});

W konstruktorze menu oznacza listę <ul> z menu, natomiast content to div zawierający divy z zawartościami poszczególnych zakładek.

I teraz problem: do każdego linku chciałbym dodać funkcję ($(this.menu).getElements("a").addEvent("click")), wewnątrz której miałbym dostęp zarówno do klikniętego linku w celu pobrania np. this.href oraz równocześnie dostęp do aktualnego obiektu klasy Tabs aby pobrać wartość this.menu. Jak to zrobić?

Tak sobie wyświetlam href linku:
Kod
$(this.menu).getElements("a").addEvent("click", function(e){
    e.stop();

    alert(this.href);
});


Natomiast tak (dodając bind()) mogę dostać się do aktualnego obiektu:
Kod
$(this.menu).getElements("a").addEvent("click", function(e){
    e.stop();

    alert(this.menu);
}.bind(this));

Jednak jak sprawić abym miał dostęp do obu rzeczy na raz?

Z góry dzięki za pomoc,
pion

PS: może źle do tego podchodzę - w razie czego proszę o podsunięcie innego pomysłu.
PS2: Wcięcia szlag trafił?
Rafal Filipek
zrób sobie może w metodzie initialize
Kod
var $this = this;
bedzie ona dla kazdego Tabs przechowywała to co trzeba smile.gif.
phpion
Nie bardzo rozumiem... co ma to dać? Kwestia jest taka, że chcę mieć dostęp zarówno do konkretnego obiektu klasy Tabs oraz równocześnie do obiektu <a>, który został kliknięty. Nie bardzo wiem jak zastosować to, o czym piszesz (i co to da).
Rafal Filipek
No dobra to może przykład będzie bardziej obrazowy smile.gif
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <script type="text/javascript" src="mootools.js"></script>
  6. <script type="text/javascript">
  7. var Tabs = new Class({
  8. initialize: function(menu, content) {
  9. this.menu = menu;
  10. this.content = content;
  11. var $this = this;
  12.  
  13. $(this.content).getChildren().setStyle("display", "none");
  14.  
  15. $(this.menu).getElements("a").addEvent("click", function(e){
  16. e.stop();
  17. alert($this.menu.get('title'));
  18. });
  19. }
  20. });
  21. </script>
  22. </head>
  23. <body>
  24. <ul id="menu1" title="Moje 1 menu">
  25. <li><a href="">1</a></li>
  26. <li><a href="">2</a></li>
  27. <li><a href="">3</a></li>
  28. </ul>
  29. <div id="content1"></div>
  30. <ul id="menu2" title="Moje 2 menu">
  31. <li><a href="">a</a></li>
  32. <li><a href="">b</a></li>
  33. <li><a href="">c</a></li>
  34. </ul>
  35. <div id="content2"></div>
  36. <script type="text/javascript">
  37. new Tabs($('menu1'),$('content1'));
  38. new Tabs($('menu2'),$('content2'));
  39. </script>
  40. </body>
  41. </html>
phpion
Dzięki! Faktycznie wprowadzenie lokalnej zmiennej rozwiązało sprawę. Jeszcze raz dzięki!
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.