我有这段代码:
this.json.each(function(obj, index) {
var li = new Element('li');
var a = new Element('a', {
'href': '#',
'rel': obj.id,
events: {
'click': function(e) {
this.doSteps(this.step + 1); // <-- causing issue
}
}
});
var img = new Element('img', {
'src': imgd + obj.img,
'alt': obj.name
});
img.inject(a);
a.inject(li);
li.inject(ul);
});
我在控制台中收到“this.doSteps不是函数”的错误。有人可以帮我解决这个问题。
提前致谢。
答案 0 :(得分:3)
您需要绑定this
,因此该函数的范围是指右this
。
'click': function(e) {
this.doSteps(this.step + 1);
}.bind(this)
这是MooTools的方式。
答案 1 :(得分:1)
尝试在闭包中捕获它:
var li = new Element('li');
var _self = this;
var a = new Element('a', {
'href': '#',
'rel': obj.id,
events: {
'click': function(e) {
_self.doSteps(_self.step + 1); // <-- causing issue
}
}
});
答案 2 :(得分:0)
导致问题的行this
引用该函数所属的对象,即events
,它确实没有任何名为doSteps
的成员。
答案 3 :(得分:0)
您可以使用此函数在每个函数中传递此内容。
this.json.each(function(obj, index) {
}, this);
答案 4 :(得分:-1)
尝试使用e
您当前正在处理的元素
this.json.each(function(obj, index) {
var li = new Element('li');
var a = new Element('a', {
'href': '#',
'rel': obj.id,
events: {
'click': function(e) {
e.doSteps(e.step + 1); // <-- here the e from the function is your element
}
}
});
var img = new Element('img', {
'src': imgd + obj.img,
'alt': obj.name
});
img.inject(a);
a.inject(li);
li.inject(ul);
});