2008-09-30 22 views
5

O elemanın dayalı bir ajax çağrısı başarılı olursa sorunun Benim anlayışBir jquery ajax başarı işlevinde çağrı dom öğesini nasıl referanslarım?

<script type='text/javascript'> 
$("#a.toggle").click(function(e){ 
    $.ajax({ 
     url: '/changeItem.php', 
     dataType: 'json', 
     type: 'POST', 
     success: function(data,text){ 
      if(data.error=='') 
      { 
       if($(this).hasClass('class1')) 
       { 
        $(this).removeClass('class1'); 
        $(this).addClass('class2'); 
       } 
       else if($(this).hasClass('class2')) 
       { 
        $(this).removeClass('class2'); 
        $(this).addClass('class1'); 
       } 
      } 
      else(alert(data.error)); 
     } 
    }); 
    return false; 
}); 
</script> 
<a class="toggle class1" title='toggle-this'>Item</a> 

bir elementin sınıfını değiştirmek çalışıyorum o başarı işlevinde bu referanslar ajax nesne parametreleri, Gibi arama dom elemanı gibi tıklama işlevinin diğer yerlerde yapar. Bu yüzden, arama dom elemanına nasıl başvururum ve sınıfları kontrol et/ekle/kaldır?

cevap

16

Sadece bir değişkende saklayabilirsiniz. Örnek:

$("#a.toggle").click(function(e) 
{ 
    var target = $(this); 
    $.ajax({ 
     url: '/changeItem.php', 
     dataType: 'json', 
     type: 'POST', 
     success: function(data,text) 
     { 
     if(data.error=='') 
     { 
      if(target.hasClass('class1')) 
      { 
       target 
        .removeClass('class1') 
        .addClass('class2'); 
      } 
      else if(target.hasClass('class2')) 
      { 
       target 
        .removeClass('class2') 
        .addClass('class1'); 
      } 
     } 
     else(alert(data.error)); 
     }  
    }); 
    return false; 
}); 
5

jQuery işleyicinizin işlevine, bu konuda bazı diğer bilgilerle birlikte, olayın hedefi geçer. Bu konuda daha fazla bilgi için bkz. http://docs.jquery.com/Events_%28Guide%29.

Kodunuzda, $ (e.target) gibi referans alınacaktır.

2

Eski olduğunu biliyorum, ancak 'e' parametresini tıklama işlevinden kullanabilirsiniz.

3

Ajax parametresini daha iyi ayarlayın: context: this. Örnek:

$.ajax({ 
    url: '/changeItem.php', 
    dataType: 'json', 
    type: 'POST', 
    context: this, 
    success: function(data,text){ 
     if(data.error=='') 
     { 
      if($(this).hasClass('class1')) 
      { 
       $(this).removeClass('class1'); 
       $(this).addClass('class2'); 
      } 
      else if($(this).hasClass('class2')) 
      { 
       $(this).removeClass('class2'); 
       $(this).addClass('class1'); 
      } 
     } 
     else(alert(data.error)); 
    } 
}); 
+0

Bağlamı kullanma, benimle ilgili sorunu çözer –

İlgili konular