我看到一些不同的访问$(这个)的例子是ajax的成功回调但没有给我我想要的答案 - 他们都在ajax函数中访问$(this),我想传递$(这个)到一个单独的职能。
因此,如果有2个文本框需要验证
$("#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());
};
当我运行代码时,我得到了响应的正确值。但是出现了错误:jquery-1.11.1.min.js:4未捕获的TypeError:无法读取obj.val()的undefined属性'toLowerCase'。
我做错了吗?
感谢您的帮助。 见:DOS /运行
答案 0 :(得分:15)
$(this)
与最内层函数相关,在这种情况下,您需要在ajax查询之前将$(this)
分配给变量,并在成功中使用该变量
$("#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
});
}
答案 1 :(得分:7)
那是因为聚焦元素的上下文在ajax调用中丢失了。
您可以在ajax中设置2012-01-01
选项以引用DOM对象,以便将ajax中的上下文设置为元素上下文:
context
答案 2 :(得分:3)
您可以通过首先引用它来实现此目的。
$("#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
});
}
答案 3 :(得分:0)
' this'成功函数中的关键字是一个不同的'这个'在您的Ajax通话之前存在,它是一个不同的范围'。
为初始'这个'创建一个新变量。所以你可以在成功回调中使用它,如下所示:
$("#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
});
}