Javascript $(此)选择器发出jquery
我在这里有一个简单的jquery函数。点击一个按钮,我想在ajax之前提醒它自己的类,然后在后续操作中再次提醒它。但是在最后一种情况下,选择器“$(this)”不起作用,并且提醒返回“undefined” 为什么?Javascript $(此)选择器发出jquery,javascript,jquery,ajax,this,Javascript,Jquery,Ajax,This,我在这里有一个简单的jquery函数。点击一个按钮,我想在ajax之前提醒它自己的类,然后在后续操作中再次提醒它。但是在最后一种情况下,选择器“$(this)”不起作用,并且提醒返回“undefined” 为什么? 尝试添加var self=$(这个)声明函数时,然后使用self而不是$(此) 因此,您的代码如下所示: $(".button").live("click",function(){ var self = $(this); alert($(this).attr('class'));
尝试添加
var self=$(这个)代码>声明函数时,然后使用self
而不是$(此)
因此,您的代码如下所示:
$(".button").live("click",function(){
var self = $(this);
alert($(this).attr('class')); //returns "button"
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html)
{
alert(self.attr('class')); //returns undefined
}
});
尝试添加var self=$(这个)代码>声明函数时,然后使用self
而不是$(此)
因此,您的代码如下所示:
$(".button").live("click",function(){
var self = $(this);
alert($(this).attr('class')); //returns "button"
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html)
{
alert(self.attr('class')); //returns undefined
}
});
我会这样做,将$(this)
存储在一个变量中,这样您就可以在整个函数中使用它,而不必每次都执行jQuery查找,而且您也不必依赖于范围来为$(this)
提供正确的元素
仅包装此
一次也是一种性能增强我会这样做,将$(此)
存储在一个变量中,这样您就可以在整个函数中使用它,而无需每次执行jQuery查找,而且您也不必依赖于范围来为$(此)提供正确的元素
仅包装此
一次也是一种性能增强这将使其正常工作:
$(".button").live("click", function() {
var button = this;
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html) {
alert($(button).attr('class'));
}
});
});
不能在嵌套函数中使用此
引用。success
函数是一个嵌套函数,它有自己的this
值。如果需要引用嵌套函数中的按钮,则必须声明一个局部变量(如button
)
这将使它发挥作用:
$(".button").live("click", function() {
var button = this;
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html) {
alert($(button).attr('class'));
}
});
});
不能在嵌套函数中使用此
引用。success
函数是一个嵌套函数,它有自己的this
值。如果需要引用嵌套函数中的按钮,则必须声明一个局部变量(如button
)
很多人已经发布了解决方案,所以我不会发布代码。我只想提一下原因,因为success方法是回调,所以$(this)的上下文不再有效。因此,您需要将其分配给一个变量并存储起来供您自己使用 很多人已经发布了解决方案,所以我不会发布代码。我只想提一下原因,因为success方法是回调,所以$(this)的上下文不再有效。因此,您需要将其分配给一个变量并存储起来供您自己使用 $(此)
仅在引用DOM中的HTML对象时存在。由于您已经尝试在AJAX调用的success函数中使用,$(this)
没有参考。例如,在下面的代码$(this)
中,引用了jQuery选择器返回的项:
$('.button').each(function() {
alert($(this));
});
您需要使用选择器返回全局范围内的项,然后在AJAX调用中将其传递给success函数:
var myButton = $('.button');
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html) { alert(myButton.attr('class')); /* returns button */ }
});
$(此)
仅在引用DOM中的HTML对象时存在。由于您已经尝试在AJAX调用的success函数中使用,$(this)
没有参考。例如,在下面的代码$(this)
中,引用了jQuery选择器返回的项:
$('.button').each(function() {
alert($(this));
});
您需要使用选择器返回全局范围内的项,然后在AJAX调用中将其传递给success函数:
var myButton = $('.button');
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html) { alert(myButton.attr('class')); /* returns button */ }
});
查看上下文
部分。基本上,代码中出现的情况是,对this
的引用不再适用。考虑到在异步处理AJAX回调时代码的上下文已经移动,这是有意义的。在.ajax()
调用中将上下文
显式设置为特定对象,将把上下文引用带到回调函数中。查看上下文
部分。基本上,代码中出现的情况是,对this
的引用不再适用。考虑到在异步处理AJAX回调时代码的上下文已经移动,这是有意义的。在.ajax()
调用中将上下文
显式设置为特定对象将在回调函数中携带对上下文的引用。您可以将上下文:此
属性添加到传递给$.ajax
调用的哈希中,这样,success
将正确设置上下文,或者您也可以执行以下操作:
success: $.proxy(function(html) { // using $.proxy will bind the function scope to this
alert($(this).attr('class'));
}, this);
或者,我见过的另一种技术:
$(".button").live("click",function(){
var self = this;
alert($(self).attr('class')); //returns "button"
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html)
{
alert($(self).attr('class')); //returns undefined
}
});
您可以添加上下文:此
属性到传递给$.ajax
调用的哈希中,这样成功
将正确处理上下文设置,或者您还可以执行以下操作:
success: $.proxy(function(html) { // using $.proxy will bind the function scope to this
alert($(this).attr('class'));
}, this);
或者,我见过的另一种技术:
$(".button").live("click",function(){
var self = this;
alert($(self).attr('class')); //returns "button"
$.ajax({
type: "POST",
url: myUrl,
data: myData,
cache: false,
success: function(html)
{
alert($(self).attr('class')); //returns undefined
}
});
I ll try..但这是解释??I ll try..但这是解释??实际上JQuery在整个API中对这个没有任何意义,对于事件处理程序,它指向触发事件的DOM对象,但从其他API指向“current”元素(请参见$。每个)如果JQuery很难猜测,那么它只会指向窗口
对象。实际上,JQuery在整个API中对这个
没有任何意义,对于事件处理程序,它指向事件触发的DOM对象,但从其他API指向“当前”元素(请参见$。每个)如果JQuery很难猜测,那么它只会指向窗口
对象。哇,10分钟内有7个答案…是的,基本上都是一样的。哦,10分钟内有7个答案…是的,基本上都是一样的