我在线上有一个断点this.hide();它在firebug中被恰当地找到,但从未传递给hide:function()。我假设我正在制作一个非常令人尴尬的noobie语法错误。有人可以告诉我拨打内部电话的正确方法吗?
谢谢!
var myDialog = myControl.extend( {
//init
show : function() {
if (this.isModal) {
this.overlay.unbind("click");
} else {
this.overlay.click(function(e) {
this.hide();
});
}
},
hide : function() {
this.overlay.hide();
this.dialog.fadeOut(300);
}
});
答案 0 :(得分:2)
您最有可能无法在this.overlay.click()处理程序中的预期上下文中运行。在this.hide()上放置一个断点并检查“this”对象。我打赌这不是你所期待的!
您需要在该调用之前缓存“this”,例如:
show : function() {
var context = this;
if (this.isModal) {
this.overlay.unbind("click");
} else {
this.overlay.click(function(e) {
context.hide();
});
},
Javascript上下文/范围是一个棘手的情况。
答案 1 :(得分:2)
由于您的this.hide();
行位于点击事件中,this
实际上是指点击的元素。