2011-08-23 79 views
0

所以我在我的自定义.js文件名为EditableObject新创建的Javascript对象文件使用Javascript/jQuery对象编码问题

function EditableObject(e, dv, i) { 
this.element = e; 
this.default_value = dv; 
this.set = 0; 
this.id = i; 

alert(this.element.html()); 

this.element.click(function (event) { 
    alert(this.element.html()); 
}); 

}

在我的主页,我一个div称为“场”有像这样的在它的文本“是啊”:

<div id="field">yeah</div> 

在我的主要页面的脚本部分,我有:

var t = new EditableObject($("#field"), "value", 1); 

页面加载时,会出现一个警告框,提示“是”。但是当我点击div时,我得到一个错误,说“this.element是未定义的”。这是为什么发生?

回答

2

里面你click处理器,this指的是不同的范围(取决于浏览器,它会成为event对象或当前功能)。您需要关闭以访问父范围的this

var self = this; 
this.element.click(function (event) { 
    alert(self.element.html()); 
}); 
2

this的事情是,它根据上下文在每个功能不同。在jQuery的绑定的功能,它是元件本身所以最直接的解决方案是:

this.element.click(function (event) { 
    alert($(this).html()); 
    // this is element, $(this) is jQuery object containing element 
}); 

所以目前,this指元件,其从例如不同它指的是EditableObject实例,因为有你在不同的功能使用this

this.id = i; 

0

您的点击处理程序内部引用DOM对象,而不是EditableObject的实例。

你可以修改它是这样的:

this.element.click(function (event) { 
    alert($(this).html()); 
}); 
0

在点击功能仅指点击本身。我相信你可以使用

e.html(); 

有代替