2012-10-26 73 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

相关问题