2016-09-27 34 views
1

我試圖創建一個對象,它偶爾會根據用戶交互重建菜單。我這樣做的方式是克隆新菜單項並刪除舊菜單項。這意味着我引入了一個新類的div實例,這意味着我必須重新加載影響這個類的jQuery。調用jQuery相同obj中的方法不起作用

在下面的例子中,點擊菜單項會導致「TypeError:this.objMethod不是函數」。

如何讓jQueryClick方法調用objMethod?我認爲這是一個範圍問題,但我無法弄清楚如何讓jQuery函數超越自身。

function myObj(){ 
    this.jQueryClick = function(){ 
     $('.menu-item').click(function(){ 
      this.objMethod(); 
     }) 
    } 

    this.objMethod = function(){ 
     alert('hounds released'); 
    } 

    this.jQueryClick(); // will be called whenever the menu is rebuild 
} 

newObj = new myObj; 

如果我之外的電話objMethod使用jQuery這樣的:

$('.menu-item').click(function(){ 
    newObj.objMethod(); 
}) 

它的工作原理,但將只對初始菜單工作,而不是當它重建。

+1

看起來您需要了解如何將事件綁定到動態元素(請參閱:['jQuery.on'](http://api.jquery.com/on/)) – Jamiec

+0

看起來您是對的!比將jQuery集成到對象本身更加優雅的解決方案,我一直認爲這看起來很雜亂。謝謝冠軍:o) –

+0

嘿酷。沒有問題。對不起,我的評論(重讀它)有點生硬。 – Jamiec

回答

-1

的jQuery,你需要通過的jQuery綁定事件時使用

$(this) 

代替

this 

因此,使用.click()方法進行綁定時,您需要使用$(this)來查找所單擊對象的實例。

0

的問題是,this的上下文是點擊監聽器內的不同......試圖通過保存this到VAR解決範圍:

var t = this; 

t.jQueryClick = function(){ 
    $('.menu-item').click(function(){ 
     t.objMethod(); 
    }) 
} 

t.objMethod = function(){ 
    alert('hounds released'); 
} 

t.jQueryClick(); 
3

使用$(document).on('click', '.menu-item',callback function);而不是那個。它將在重建時從根文檔對象中提取選擇器Everytime。