2012-10-18 20 views
1

當我有以下功能:維護的價值「這個」使用事件偵聽器

onDocumentKeyUp: function (e) { 
    if (e.keyCode === 27) { 
     this.deactivate(); 
    } 
} 

我想結合這個像這樣:

$(document).on('keyup', onDocumentKeyUp); 

然而,當我這樣做, this裏面的onDocumentKeyUp函數是指文檔。我解決了這個做:

var self = this; 
$(document).on('keyup', function(e) { self.onDocumentKeyUp(e); }); 

這工作,但東西告訴我有拉這一關一個更清潔的方式。某種程度上會在.call().apply() ..在這裏應用?我仍然不確定這些功能是如何工作的。

此外,我不一定要限制自己到jQuery.on()。如果有這樣的「香草」方式,請成爲我的客人來教我。

+0

你的意思是? $(document).on('keyup',function(e){onDocumentKeyUp.call(self,e);}); – cbayram

+0

可以,但對我來說感覺不太清潔。我想知道是否有一種乾淨的,慣用的方式將事件的價值傳遞給事件處理程序。 – cabaret

回答

2

您可以使用.bind()設置上下文(沒有立即稱之爲callapply):

$(document).on('keyup', this.onDocumentKeyUp.bind(this)); 

由於此方法僅受符合ES5.1的瀏覽器支持,因此您可以使用jQuery.proxy而不是polyfilling。