2012-07-13 46 views
2

我在这一行上有一个断点this.hide();它可以在萤火虫中找到,但绝不会传递给hide:function()。我假设我正在做一个非常令人尴尬的noobie语法错误。有人可以告诉我做这个内部电话的正确方法吗?Noobie jquery class Q:内部函数调用

谢谢!

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); 
    } 
}); 

回答

2

您很可能不在您的this.overlay.click()处理程序的预期上下文中操作。在this.hide()上放置一个断点并检查“this”对象。我敢打赌,这不是你所期待的!

你希望缓存“这个”这一呼吁之前,如:

show : function() { 
    var context = this; 
    if (this.isModal) { 
     this.overlay.unbind("click"); 
    } else { 
     this.overlay.click(function(e) { 
      context.hide(); 
    }); 
}, 

的Javascript背景/范围是一个棘手的局面。

+0

哇!很好的答案!非常感谢您......只需添加局部范围的上下文行就可以解决问题,所以我想像“this”在this.hide()调用期间正在变化/尝试改变,碰到了它自己并且被冒犯了。哇,这个问题并没有我想象的那么愚蠢......感谢您的帮助! – 2012-07-13 21:15:03

2

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