所以我在自定义.js文件中有一个名为EditableObject的新创建的Javascript对象
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());
});
}
在我的主页中,我有一个名为“field”的div,其中包含文字“yeah”,如下所示:
<div id="field">yeah</div>
在我的主页的脚本部分,我有:
var t = new EditableObject($("#field"), "value", 1);
当页面加载时,会出现一个警告框,上面写着“是的”。但是当我点击div时,我得到一个错误,说“this.element is undefined”。为什么会这样?
答案 0 :(得分:2)
具有this
的东西是它根据上下文在每个函数中有所不同。在jQuery绑定函数中,它是元素本身,因此最直接的解决方案是:
this.element.click(function (event) {
alert($(this).html());
// this is element, $(this) is jQuery object containing element
});
目前,this
指的是元素,它不同于这条线
this.id = i;
它引用EditableObject
的实例,因为您在其他函数中使用this
。
答案 1 :(得分:2)
在click
处理程序中,this
指的是不同的范围(取决于浏览器,它将是event
对象或当前函数)。您需要一个闭包来访问父作用域的this
:
var self = this;
this.element.click(function (event) {
alert(self.element.html());
});
答案 2 :(得分:0)
此指的是DOM对象,而不是EditableObject
的实例。
您可以像这样修改它:
this.element.click(function (event) {
alert($(this).html());
});
答案 3 :(得分:0)
点击功能中的 this 仅指点击本身。我相信你可以使用
e.html();
而不是