2012-07-15 16 views
6

Duplicar posible:
$(this) doesn't work in a functionjQuery - 'esto' selector no funciona dentro de llamada de retorno

estoy escribiendo posterior eliminación de código en jQuery, la eliminación de la misma se realiza a través Después de la solicitud a respaldos, después de que el servidor devuelva 200, quiero eliminar esta publicación en el lado del cliente.

$('.delete-post').click(function() { 
    $.post($(this).attr('href'), {}, function(data) { 
     $(this).closest('.post').remove(); 
    }); 
    return false; 
}); 

Sin embargo, me he dado cuenta de que dentro de la función (datos) {...) el selector 'this' no funciona. Necesito eliminar el más cercano a $('.delete-post') div con la clase '.post'. ¿Cómo manejar este problema? ¡Gracias!

Respuesta

10

$(this) existe en el click event pero function(data) { no forma parte del evento click rather callback function. Así que guarde el $ (esto) en alguna variable, por ejemplo that para un uso posterior.

Prueba esto:

$('.delete-post').click(function(e) { 
    e.preventDefault(); 
    var that = $(this); 
    $.post(that.attr('href'), { }, function(data) { 
     // $(this).closest('.post').remove(); 
     that.closest('.post').remove(); 
    }); 
}); 
+2

Debe explicar por qué 'this' tiene un valor diferente en la devolución de llamada. – jfriend00

+0

Ya he explicado gracias por recordarme @ jfriend00 – Adil

+0

Muchas gracias, ¡ahora lo tengo! Simple y claro) – f1nn