jQuery - não é possível definir propriedades css em ajax função de retorno
-
22-08-2019 - |
Pergunta
Eu estou tentando obter uma função jquery ajax chamada de retorno para atualizar a cor de uma célula da tabela de fundo, mas não posso fazê-lo funcionar.
Eu tenho o seguinte código (que produz nenhum erro no Firebug):
$(".tariffdate").click(function () {
var property_id = $('#property_id').attr("value");
var tariff_id = $('#tariff_id').attr("value");
var tariff_date = $(this).attr("id");
$.post("/admin/properties/my_properties/booking/edit/*", { property_id: property_id, tariff_id: tariff_id, tariff_date: tariff_date },
function(data){
var bgcol = '#' + data;
$(this).css('background-color',bgcol);
alert("Color Me: " + bgcol);
});
Eu adicionei o alerta apenas para confirmar que estou recebendo a parte de trás de dados esperado (um código hexadecimal de 6 dígitos), e eu sou - mas o fundo da minha célula da tabela se recusa teimosamente a mudança.
Todas as células da tabela têm o .tariffdate classe, mas também têm ID individual.
Como um teste, eu tentei criar uma função de foco para essa classe:
$(".tariffdate").hover(function () {
$(this).css('background-color','#ff0000');
});
A obras acima bem - então eu estou realmente confuso sobre o porquê minha função de retorno não está funcionando. Alguma idéia?
Solução
No AJAX concluída manipulador a instância do this
é alterada para o objeto ajax. Você vai precisar para salvar a instância do this
a um objeto e usar esse objeto. Por exemplo:
$(".tariffdate").click(function () {
var property_id = $('#property_id').attr("value");
var tariff_id = $('#tariff_id').attr("value");
var tariff_date = $(this).attr("id");
var tariff = $(this);
$.post("/admin/properties/my_properties/booking/edit/*",
{ property_id: property_id, tariff_id: tariff_id, tariff_date: tariff_date },
function(data) {
var bgcol = '#' + data;
tariff.css('background-color',bgcol);
alert("Color Me: " + bgcol);
}
);
});
Outras dicas
Verifique qual a "isto" variável está em você ajax função de retorno. Eu suspeito que ele não está se referindo a .tariffdate