2011-07-04 47 views
0

我試圖在事件處理程序中獲取原型。在事件處理程序中獲取原型

function Post(){ 
    this.post; 
    this.deleteButton; 
} 
Post.prototype.delete = function(){ 

    var OBJ = this;//this is not the prototype, instead it is the HTML element (deleteButton) 
    $(OBJ.container).remove(); 
} 
Post.prototype.createPost = function(){ 

    var OBJ = this; 
    OBJ.post = document.createElement('div'); 
    OBJ.post.className = 'post' 
    OBJ.deleteButton = document.createElement('div'); 
    OBJ.deleteButton.addEventListener('click', OBJ.delete, false); 
} 

請看上面的註釋部分。刪除處理程序被聲明爲Post的原型方法。我將刪除處理程序分配給刪除按鈕。事情是,this成爲HTML元素,而不是對象的原型。

編輯:

我也希望有機會上的刪除處理

+0

考慮將* createPost *函數體內構造函數,所以你不需要2次調用來創建* Post *實例。 – RobG

回答

4

像這樣:

OBJ.deleteButton.addEventListener('click', function() { 
    OBJ.delete(); 
}, false); 

OBJ不是原型,它指的是實例。

更新:如果你想太刪除,存儲對它的引用:

this.deleteHandler_ = function() { 
    OBJ.delete(); 
}; 
OBJ.deleteButton.addEventListener('click', this.deleteHandler_, false); 

別的地方:

this.deleteButton.removeEventListener('click', this.deleteHandler_); 
+0

Kling忘了提及我也想刪除事件處理程序 – einstein

+0

@ Woho87:然後存儲對它的引用。 –

+1

小額外詳細信息:MSIE模型需要使用oElt.attachEvent而不是oElt.addEventListener – hornetbzz

0
Post.prototype.createPost = function(){ 

    var OBJ = this; 
    OBJ.post = document.createElement('div'); 
    OBJ.post.className = 'post' 
    OBJ.deleteButton = document.createElement('div'); 
    OBJ.deleteButton.addEventListener('click', function(){OBJ.delete();}, false); 
} 

如果你使用jQuery,您可以使用代理方法:

OBJ.deleteButton.addEventListener('click',$.proxy(OBJ.delete,OBJ), false); 
+1

如果使用此解決方案刪除事件處理程序,我將遇到麻煩,是嗎? – einstein

1

在jQuery中您可以使用$.proxy

var onDelete = $.proxy(OBJ.delete, OBJ); 
OBJ.deleteButton.addEventListener('click', onDelete, false); 

也有ECMAScript的5 bind方法:

var onDelete = OBJ.delete.bind(OBJ); 
OBJ.deleteButton.addEventListener('click', onDelete, false); 

要刪除監聽器:

OBJ.deleteButton.removeEventListener('click', onDelete, false); 
+0

OP沒有提到jQuery。 –

+0

@Felix Kling,它完全貶低了答案。 – katspaugh

+0

否removeEventListener示例? –

相關問題