Javascript / jQuery对象编码问题

时间:2011-08-23 17:19:38

标签: javascript jquery

所以我在自定义.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”。为什么会这样?

4 个答案:

答案 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(); 

而不是