2

我在 this.hide(); 线上有一个断点。它可以在萤火虫中适当地找到,但永远不会通过隐藏:函数()。我假设我正在犯一个非常令人尴尬的 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);
    }
});
4

2 回答 2

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 上下文/范围是一个棘手的情况。

于 2012-07-13T21:06:31.583 回答
2

因为您的this.hide();行在点击事件中,this实际上是指被点击的元素。

于 2012-07-13T21:08:13.993 回答