2012-10-26 106 views
2

我在JavaScript中有一類功能:JQuery的綁定DOM元素點擊事件的成員函數

function myClass() 
{ 
    this.myInit = function() 
    { 
     myObj = this; 
     var id-foo = 'myId'; 
     jQuery('#'+id-foo).bind('click', function() { myObj.foo(id-foo); }); 
    } 

    this.foo = function(id) { alert(id); } 
} 

我想只是一個DOM元素綁定到一個事件(點擊,dragonstart等),使之調用當前對象的函數(實際上是這個)。我試圖直接調用this.foo,但那不起作用,螢火蟲告訴我,foo不是函數。是我給匿名函數的參數id-foo的問題? THX提前

回答

3

你的問題是在這裏:

var id-foo = 'myId'; 

這不是一個變量有效的名稱。

另請注意,如果您不在myClass的實例上調用myInit函數,則您的代碼將不起作用。

這一點,例如,是行不通的:

var obj = new myClass(); 
var f = obj.myInit; 
f(); 

而這個應該工作:

var obj = new myClass(); 
obj.myInit(); 

DEMONSTRATION

+0

我是sry,這只是抽象的例子,錯誤的變量只是一個錯過打字。所以請假定變量名稱爲id_foo,但該示例不起作用! – Michbeckable

+0

如果我的編輯不足以解決問題,您可以創建一個[小提琴](http://jsfiddle.net)來展示問題嗎? –

+0

是的,在myClass的一個實例上調用myInit函數。但是當我點擊id =「myId」元素上的網站時,它表示找不到foo函數 – Michbeckable

0

以下@ dystroy的回答後,那麼我會建議你不要將自己與this關鍵字混淆。按照這種模式

var myClass = function() { 
    myInit: function() 
    { 
     myObj = this; 
     var id_foo = 'myId'; 
     jQuery('#'+id_foo).bind('click', function() { myObj.foo(id_foo); }); 
    } 

    foo: function(id) { alert(id); } 
} 
+0

這不是一種聲明「class」的合法方式 - 你已經將對象字面值語法與函數混合在一起 – Alnitak

相關問題