2012-07-13 84 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實際上是指單擊的元素。