jQuery自定义函数错误"这个"参考

时间:2016-04-05 11:35:20

标签: jquery function reference this

我需要多次在jQuery中执行相同的代码,所以我决定创建自己的jQuery函数。

到目前为止看起来像这样:

                jQuery.fn.extend({
                fooFunction: function () {
                    $.ajax({
                        type: "POST",
                        cache: false,
                        url: "includes/thescript.php",
                        success: function (data)
                        {
                            $(this).html(data);
                        }, complete: function () {
                            // do sth
                        }
                    });
                    return $(this);
                }
            });

但现在我遇到了问题,那就是#34;这个"似乎是指错误的实例,而在成功函数中使用它" $(this).html(data); "。

当我使用ID 时,例如$("#TheID&#34)的html(数据)。它有效,但为什么不用"这"?

介于:我用以下函数调用该函数: $("#TheID&#34)。fooFunction()

3 个答案:

答案 0 :(得分:2)

问题是,当您进入this参数提供的匿名函数时,success的范围会发生变化。要解决此问题,您可以将外部作用域中的this引用存储在变量中,如下所示:

jQuery.fn.extend({
    fooFunction: function () {
        var $el = $(this);
        $.ajax({
            type: "POST",
            cache: false,
            url: "includes/thescript.php",
            success: function (data) {
                $el.html(data);
            }, 
            complete: function () {
                // do something
            }
        });
        return $el;
    }
});

答案 1 :(得分:0)

在jQuery ajax回调中,“ this ”是对ajax请求中使用的选项的引用。它不是对DOM元素的引用。

有关详细信息,请访问此链接$(this) inside of AJAX success not working

答案 2 :(得分:0)

在函数缓存$(this)的开头,然后使用它。

函数上下文的函数引用中的

this而不是目标元素。

试试这个。

jQuery.fn.extend({
    fooFunction: function () {
        var $this = $(this);
        $.ajax({
            type: "POST",
            cache: false,
            url: "includes/thescript.php",
            success: function (data)
            {
                $this.html(data);
            }, complete: function () {
                // do sth
            }
        });
        return $this;
    }
});