"未定义不是函数"在jQuery插件中

时间:2014-09-11 18:05:44

标签: jquery

我正在尝试在jQuery中编写一个插件,但我得到了#34; undefined不是一个函数"在这一部分:

(function($) {
    $.fn.build = function(options){
        var settings = $.extend({
            x: 0,
            y: 0,
            type: 0
        }, options);

        $.post("/build", { x: settings.x, y: settings.y, type: settings.type}, function(data) {
            // Return JSON array
            if(data['doBuild'] == 'true') {
                this.append("<div class='item' style='left:"+settings.x+"px; top:"+settings.y+"px;'></div>"); // ERROR ON THIS LINE
            }
        },'json');  

        return this;
    };
}(jQuery));

我认为这与“这个&#39;声明,但我不理解错误。为什么它不起作用?

1 个答案:

答案 0 :(得分:4)

this$.post的回调中引用the jqXHR object。看起来您只需要保存对外部this的引用:

    var that = this;
    $.post("/build", { x: settings.x, y: settings.y, type: settings.type}, function(data) {
        // Return JSON array
        if(data['doBuild'] == 'true') {
            that.append("<div class='item' style='left:"+settings.x+"px; top:"+settings.y+"px;'></div>");
        }
    },'json'); 

或者您可以使用$.proxy

    $.post("/build", { x: settings.x, y: settings.y, type: settings.type}, $.proxy(function(data) {
        // Return JSON array
        if(data['doBuild'] == 'true') {
            this.append("<div class='item' style='left:"+settings.x+"px; top:"+settings.y+"px;'></div>");
        }
    }, this),'json');