Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Kiedy $(this) odnosi sie do czego ?
Forum PHP.pl > Forum > Przedszkole
Wolfie
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 ?
vokiel
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>
Wolfie
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
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.