jQuery – невозможно установить свойство CSS в функции обратного вызова ajax
-
22-08-2019 - |
Вопрос
Я пытаюсь получить функцию обратного вызова jquery ajax для обновления цвета фона ячейки таблицы, но не могу заставить ее работать.
У меня есть следующий код (который не выдает ошибок в 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);
});
Я добавил предупреждение только для того, чтобы подтвердить, что я получаю обратно ожидаемые данные (шестизначный шестнадцатеричный код), и я это делаю, но фон моей ячейки таблицы упорно отказывается меняться.
Все ячейки таблицы имеют класс .tariffdate, но также имеют индивидуальный идентификатор.
В качестве теста я попытался создать функцию наведения для этого класса:
$(".tariffdate").hover(function () {
$(this).css('background-color','#ff0000');
});
Вышеупомянутое работает нормально, поэтому я очень не понимаю, почему моя функция обратного вызова не работает.Есть идеи?
Решение
В обработчике завершения AJAX экземпляр this
заменяется на объект ajax.Вам нужно будет сохранить экземпляр this
к объекту и использовать этот объект.Например:
$(".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);
}
);
});
Другие советы
Проверьте, что такое переменная «this» в вашей функции обратного вызова ajax.Я подозреваю, что речь идет не о .tariffdate.