Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Kiedy $(this) odnosi sie do czego ?
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam,

Mam nastepujacące dwie funkcje jQuery:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $("#menu").find('a').live("click",function() {
  3. $('body').load("index.php", {'mailbox': $(this).attr('value'),
  4. 'controller' : 'mailbox',
  5. 'action' : 'mailbox'});
  6. });
  7. $(".message").find('label').live("click",function() {
  8. $('#messages').load("index.php", {'id' : $(this).find('input').val(),
  9. 'controller' : 'mailbox',
  10. 'action' : 'message',
  11. 'repeat' : 'yes'});
  12. });
  13. });
[JAVASCRIPT] pobierz, plaintext


No i nie rozumiem tutaj jednej rzeczy.
Jak widac konstrukcja tych funkcji jest praktycznie identyczna, tylko ze w pierwszej slowko $(this) odnosi sie do $('#menu).find('a') a w drugiej slowko this odnosi sie do $('#messages'), tak przynajmniej wynika z tego co wywnioskowalem w czasie prob, bledow i testowania.

Od razu zatrzymam sie na chwile przy drugiej funkcji, obsługuje ona taki kod (a raczej powinna obslugiwac bo nie dziala tak jak powinna - zaraz wytlumacze dlaczego) :

  1. <div id="messages">
  2. <div class="message">
  3. {section name="i" loop=$parts}
  4. <label>{$parts[i].from}</label>
  5. <label>{$parts[i].id}<input type="hidden" value="{$parts[i].id}"></label>
  6. {/section}
  7. </div>
  8. </div>


No wlasnie, druga funkcja powinna analogicznie do pierwszej zwracac mi value dla inputa, ale tego nie robi, wlasnie dlatego ze slowko $(this) - z tego co mi sie wydaje - odnosi sie tutaj nie do $(".message").find('label') - jakby wynikalo z analogii do pierwszej funkcji - lecz odnosi sie do $('#messages') i przez to nie moge wyciagnac atrybutu value.
Moze ktos mi wytlumaczyc ten fenomen ?
Dlaczego w pierwszej i drugiej funkcji - choc zbudowanie prawie identycznie - $(this) odnosi sie do roznych czesci ?

Ten post edytował Wolfie 13.10.2009, 17:28:46
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Jakieś błędy w firebugu, czy nic? A pokaż, co zwróci Ci taki zapis: (w firebugu)
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('#menu a').live('click',function() {
  3. $('body').load('index.php', {'mailbox': console.info($(this).attr('value')), //1.
  4. 'controller' : 'mailbox',
  5. 'action' : 'mailbox'});
  6. });
  7. $('.message label').live('click',function() {
  8. $('#messages').load('index.php', {'id' : console.info($(this).next('input').val()), //2.
  9. 'controller' : 'mailbox',
  10. 'action' : 'message',
  11. 'repeat' : 'yes'});
  12. });
  13. });
[JAVASCRIPT] pobierz, plaintext

1. $(this) -> a, .attr() -> wartość w a (co prawda a raczej nie ma pola value, ale niech Ci będzie)
2. $(this) -> label, .find() -> input, .val() -> wartość inputa
  1. <div id="messages">
  2. <div class="message">
  3. {section name="i" loop=$parts}
  4. <label>{$parts[i].from}</label>
  5. <label>{$parts[i].id}</label>
  6. <input type="hidden" value="{$parts[i].id}">
  7. {/section}
  8. </div>
  9. </div>


--------------------
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Rozwiazalem problem w ten sposob :

[JAVASCRIPT] pobierz, plaintext
  1. $(".message").find('label').live("click",function() {
  2. var self = $(this);
  3. $('#messages').load("index.php", {'id' : self.find('input').val(),
  4. 'controller' : 'mailbox',
  5. 'action' : 'message',
  6. 'repeat' : 'yes'});
  7. });
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:08