我正在尝试在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;声明,但我不理解错误。为什么它不起作用?
答案 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');