jQuery - kann nicht eingestellt CSS-Eigenschaft in Ajax-Callback-Funktion
-
22-08-2019 - |
Frage
Ich versuche, eine Jquery Ajax Callback-Funktion erhalten die Hintergrundfarbe einer Tabellenzelle zu aktualisieren, aber ich kann es nicht arbeiten.
Ich habe den folgenden Code (die keine Fehler in Firebug erzeugt):
$(".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);
});
Ich habe den Alarm nur hinzugefügt, um zu bestätigen ich die erwarteten Daten zurück (ein 6-stellige Hexadezimal-Code) bekommen, und ich bin - aber der Hintergrund meiner Tabellenzelle hartnäckig weigert zu ändern.
Alle Tabellenzellen haben die Klasse .tariffdate sondern auch individuelle ID.
Als Test habe ich versucht, eine Hover-Funktion für diese Klasse zu erstellen:
$(".tariffdate").hover(function () {
$(this).css('background-color','#ff0000');
});
Die obige funktioniert gut - also bin ich wirklich verwirrt, warum meine Callback-Funktion funktioniert nicht. Irgendwelche Ideen?
Lösung
In der AJAX abgeschlossen Handler die Instanz von this
auf das Ajax-Objekt geändert. Sie müssen die Instanz von this
auf ein Objekt speichern und das Objekt verwenden. Zum Beispiel:
$(".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);
}
);
});
Andere Tipps
Überprüfen Sie, was die "this" Variable in AJAX Callback-Funktion ist. Ich vermute, dass es nicht .tariffdate Bezug