2016-05-24 7 views
3

Ich habe ein paar verschiedene Beispiele für den Zugriff auf $ (this) gesehen, ist der Erfolgsrückruf von ajax, aber keiner gibt mir die Antwort, die ich will - sie alle greifen $ (dies) Innerhalb der Ajax-Funktion möchte ich $ (this) an eine separate Funktion übergeben.

Also, wenn es zwei Textfelder sind, die validiert werden müssen

$("#tb1").focusout(function(){ 
    $.ajax({ 
     type:'POST', 
     url: 'validURL', 
     data: {various_parameters}, 
     contentType: 'application/json; charset=utf-8', 
     dataType:'json', 
     success: function(data){ 
      validInput(data, $(this)); 
     }, 
     error: error 
    }); 
} 

$("#tb2").focusout(function(){ 
    $.ajax({ 
     type:'POST', 
     url: 'validURL', 
     data: {various_parameters}, 
     contentType: 'application/json; charset=utf-8', 
     dataType:'json', 
     success: function(data){ 
      validInput(data, $(this)); 
     }, 
     error: error 
    }); 
} 

function validInput(response, obj){ 
    console.log(response.d); 
    console.log(obj.val()); 
}; 

Wenn ich den Code, den ich den richtigen Wert für response.d bekommen laufen, aber ein Fehler: jquery-1.11.1.min.js: 4 Uncaught TypeError: Kann die Eigenschaft 'toLowerCase' von undefined für obj.val() nicht lesen.

Mache ich etwas falsch?

Danke für jede Hilfe. Siehe: Dos/Run

Antwort

12

$(this) ist in Bezug auf die am weitesten innen Funktion, und in diesem Fall werden Sie $(this) auf eine Variable vor der Ajax-Abfrage zuweisen müssen, und verwenden Sie diese Variable in dem Erfolg statt.

$("#tb1").focusout(function(){ 
    var elem = $(this); 
    $.ajax({ 
     type:'POST', 
     url: 'validURL', 
     data: {various_parameters}, 
     contentType: 'application/json; charset=utf-8', 
     dataType:'json', 
     success: function(data){ 
      validInput(data, elem); 
     }, 
     error: error 
    }); 
} 
+0

Vielen Dank für Ihre Hilfe @Hazonko - ist das Problem mit $ (this) zu sein "Relativ" ein Problem nur bei Verwendung von Ajax oder ist es jederzeit $ (This) übergeben? – SeeDosRun

+1

Wenn Sie geschachtelte Funktionen haben, bezieht sich dies auf die innerste Funktion – madalinivascu

4

Nun, das ist, weil Kontext von Fokuselement in Ajax-Aufruf verloren ist.

Sie können context Option in AJAX Bezug von DOM-Objekt gesetzt Kontext in AJAX Element Kontext für die Einstellung:

$("#tb2").focusout(function(){ 
    $.ajax({ 
    type:'POST', 
    url: 'validURL', 
    context : this, 
    data: {various_parameters}, 
    contentType: 'application/json; charset=utf-8', 
    dataType:'json', 
    success: function(data){ 
     validInput(data, $(this)); 
    }, 
    error: error 
    }); 
}); 
2

Alternative Weg, dies ist durch Bezugnahme auf sie in erster Linie erreichen kann.

$("#tb2").focusout(function(){ 
    var $this = $(this); 
    $.ajax({ 
     type:'POST', 
     url: 'validURL', 
     data: {various_parameters}, 
     contentType: 'application/json; charset=utf-8', 
     dataType:'json', 
     success: function(data){ 
      validInput(data, $this); 
     }, 
     error: error 
    }); 
} 
0

Das ‚this‘ Schlüsselwort in Ihrer Erfolgsfunktion, ist ein andere ‚this‘, die vor Ihrem Ajax-Aufruf existiert, es ist ein anderer ‚Umfang‘.

Machen Sie eine neue Variable für die anfängliche ‚dies‘, so dass Sie es innerhalb des Erfolgs Rückruf nutzen können, etwa so:

$("#tb1").focusout(function(){ 
    var $this = $(this); 
    $.ajax({ 
     type:'POST', 
     url: 'validURL', 
     data: {various_parameters}, 
     contentType: 'application/json; charset=utf-8', 
     dataType:'json', 
     success: function(data){ 
      // Here we use the $this variable, initialised before the $.ajax call. 
      validInput(data, $this); 
     }, 
     error: error 
    }); 
} 
Verwandte Themen