2012-09-13 86 views
4
當我運行這段代碼
function myClass(myobject){ 
     var myclass = {}; 

     myclass.registerEvent = function(){ 
      $('#'+myobject.id).live('someEventThatTriggersRightAway', runMe); 
     }; 

     runMe = function(){ 
      $('#'+myobject.id).die('someEventThatTriggersRightAway', runMe); 
      console.log("Hello "+myobject.name); 
     }; 

     return myclass; 
} 


var instance1 = new myClass({id:'button1',name:'MATO'}); 
var instance2 = new myClass({id:'button2',name:'YAMA'}); 

jQuery:我如何將參數傳遞給事件監聽器的回調函數?

instance1.registerEvent(); 

結果是

Hello YAMA 

這是因爲如果一審已經由第二一個覆蓋。我可以解決這個問題,只要我可以在事件回調中傳遞'myobject',但我不知道該怎麼做。而且如果它有參數,我也無法殺死它。我怎樣才能做到這一點?

謝謝!

回答

2

您錯過了runMevar,因此runMe泄漏到全局執行上下文中。因此,每次撥打myClass時,runMe中對myobject的引用都會發生變化。

var runMe = function(){ 
    $('#'+myobject.id).die('someEventThatTriggersRightAway', runMe); 
    console.log("Hello "+myobject.name); 
}; 

這是working example


旁註:你知道,jQuery的.live().die()方法現在已經過時?您應該使用.on()(jQuery 1.7+)或.delegate()

+0

哇,我愛你的人!我感到非常愚蠢。我不知道你應該把功能放在太多!哇!這基本上解決了我的問題。我有一個問題...我用bind()和unbind()及其工作...是好的嗎?或委託()應該更好? –

+0

沒問題,很高興我可以幫助:)如果在代碼運行時DOM中存在元素,則可以使用'bind'和'unbind'。如果不是的話,你可以使用'delegate'把更高的事件委託給DOM樹。 –

1

下面的答案是純粹的理論,因爲.live().die()已被棄用,因此不應再使用。爲了讓你的代碼是最新的,substitue下面結合以下的.live()/.die()電話:

// for .live() 
$(document).on('click', '#'+myobject.id, myobject, runMe); 

// for .die() 
$(document).off('click', '#'+e.data.id, runMe); 

在這裏,你可以而且應該與按鈕的最近靜態父元素替換documentNew code demo


按照 documentation,數據是對 .live()方法,你通過 event object訪問一個可選的第二個參數。使用方法如下:

function myClass(myobject){ 
     var myclass = {}; 

     myclass.registerEvent = function(){ 
      $('#'+myobject.id).live('click', myobject, runMe); 
     }; 

     var runMe = function(e){ 
      $('#'+e.data.id).die('click', runMe); 
      console.log("Hello "+e.data.name); 
     }; 

     return myclass; 
} 

var instance1 = new myClass({id:'button1',name:'MATO'}); 
var instance2 = new myClass({id:'button2',name:'YAMA'}); 

instance1.registerEvent(); 
instance2.registerEvent(); 

Old code working demo

+0

哇!謝謝!我不知道生活和死亡現在已被棄用。我嘗試綁定和解除綁定是好的?無論如何,我嘗試了你的工作演示和它的工作很棒!非常感謝! –

相關問題