jQuery: impossibile impostare le proprietà CSS nella funzione di callback Ajax
-
22-08-2019 - |
Domanda
Sto cercando di ottenere una funzione di callback ajax jquery per aggiornare il colore di sfondo di una cella di tabella, ma non riesco a farlo funzionare.
Ho il seguente codice (che non produce errori in 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);
});
Ho aggiunto l'avviso solo per confermare che sto ricevendo i dati attesi (un codice esadecimale a 6 cifre), e lo sono, ma lo sfondo della cella della mia tabella si rifiuta ostinatamente di cambiare.
Tutte le celle della tabella hanno la classe .tariffdate ma hanno anche un ID individuale.
Come test, ho provato a creare una funzione hover per quella classe:
$(".tariffdate").hover(function () {
$(this).css('background-color','#ff0000');
});
Quanto sopra funziona bene, quindi sono davvero confuso sul motivo per cui la mia funzione di richiamata non funziona.Qualche idea?
Soluzione
Nel gestore AJAX completato l'istanza di this
viene modificato nell'oggetto ajax.Dovrai salvare l'istanza di this
a un oggetto e utilizzare quell'oggetto.Per esempio:
$(".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);
}
);
});
Altri suggerimenti
Verifica a quanto il "questo" variabile è in voi funzione di callback ajax. Ho il sospetto che non è facendo riferimento alla .tariffdate