Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $(此)选择器发出jquery_Javascript_Jquery_Ajax_This - Fatal编程技术网

Javascript $(此)选择器发出jquery

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'));

我在这里有一个简单的jquery函数。点击一个按钮,我想在ajax之前提醒它自己的类,然后在后续操作中再次提醒它。但是在最后一种情况下,选择器“$(this)”不起作用,并且提醒返回“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

    }
});

尝试添加
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个答案…是的,基本上都是一样的