Schauen Sie sich das Schlüsselwort this in JavaScript an und wie es funktioniert. Ich bin mir sicher, dass wir alle auf dieses Problem gestoßen sind:
$("myLink").on("click", function() {
console.log(this); //zeigt auf myLink (wie erwartet)
$.ajax({
//ajax Einrichtung
success: function() {
console.log(this); //zeigt auf das globale Objekt. Huh?
}
});
});
this ist eine Variable, die automatisch für Sie festgelegt wird, wenn eine Funktion aufgerufen wird. Der Wert, den es erhält, hängt davon ab, wie eine Funktion aufgerufen wird. In JavaScript haben wir einige Hauptmethoden, Funktionen aufzurufen. Ich werde heute nicht über alle sprechen, sondern nur über die drei gängigsten Methoden, die die meisten Menschen verwenden; entweder wenn eine Funktion als Methode aufgerufen wird, oder für sich allein, oder als Ereignisbehandler. Je nachdem, wie eine Funktion aufgerufen wird, wird this unterschiedlich gesetzt:
function foo() {
console.log(this); //globales Objekt
};
myapp = {};
myapp.foo = function() {
console.log(this); //zeigt auf das myapp-Objekt
}
var link = document.getElementById("myId");
link.addEventListener("click", function() {
console.log(this); //zeigt auf den Link
}, false);
Wenn Sie $("myLink").on("click", function() {}) machen, bedeutet dies, dass die Funktion ausgelöst wird, wenn auf das Element geklickt wird. Aber diese Funktion ist als Ereignisbehandler gebunden, daher wird this auf die Referenz zum DOM-Element myLink gesetzt. Die success-Methode, die Sie im Ajax-Aufruf definieren, ist einfach eine normale Funktion, und daher wenn sie aufgerufen wird, wird this auf das globale Objekt gesetzt, so wie es bei jeder Funktion geschieht, die kein Ereignisbehandler oder eine Objektmethode ist.
$("myLink").on("click", function() {
console.log(this); //zeigt auf myLink (wie erwartet)
var _this = this; //Referenz speichern
$.ajax({
//ajax Einrichtung
success: function() {
console.log(this); //zeigt auf das globale Objekt. Huh?
console.log(_this); //besser!
}
});
});
Quelle: http://tinyurl.com/melbl92