2008-09-30 24 views
5

estoy tratando de modificar la clase de un elemento si una llamada ajax basado en ese elemento es exitosa¿Cómo hago referencia al elemento dom que llama en una función de éxito jquery ajax?

<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> 

Mi comprensión del problema es que en la función de este éxito referencias ajax los parámetros de objeto, NO es el elemento dom que llama como lo hace dentro de otros lugares de la función de clic. Entonces, ¿cómo hago referencia al elemento dom que llama y verifico/agrego/quito clases?

Respuesta

16

Puedes simplemente almacenarlo en una variable. Ejemplo:

$("#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 pasa el destino del evento, junto con alguna otra información sobre el mismo, a la función de controlador. Ver http://docs.jquery.com/Events_%28Guide%29 para más información sobre esto.

En su código, se hace referencia a $ (e.target).

2

Sé que es viejo pero puede usar el parámetro 'e' de la función de hacer clic.

3

Mejor ajuste parámetro ajax: context: this. Ejemplo:

$.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

usando el contexto soluciona el problema para mí –

Cuestiones relacionadas