我遇到了以下问题:
function Conclude (thing){
this.quant = thing.find('#quantity_material').val();
this.thing = thing;
this.material =[];
this.finish = [];
this.make = function (){
var i=0;
this.thing.each(function(){
this.material [i]= $(this).find('#material_val').val();
//Conclude.material doesn't work either
i++;
});
}
}
我想从几个表中分配conclude.material
输入值,以便conclude.material[1]
从第一个表中获得#material_val
的值,依此类推。问题在于,当我写这篇文章时,它并没有引用conclude
内的函数.each()
。
我做错了什么?
答案 0 :(得分:4)
JS中的每个function
语句都有自己的this
变量。你有两个函数,一个叫做Conclude
,另一个是匿名函数(真的有两个匿名函数,但是我要解释的东西仍然适用)。
您的错误在这里:
this.thing.each(function(){
- > this
不属于"属于"到Conclude
功能。它属于匿名函数。
最简单的出路,至少对你而言,是改变匿名函数的范围,以便匿名函数中的this
引用外部Conclude
函数。看到您已使用jQuery
,请使用jQuery.proxy
方法执行此操作。
代码:
function Conclude (thing){
this.quant = thing.find('#quantity_material').val();
this.thing = thing;
this.material =[];
this.finish = [];
this.make = $.proxy(function (){
this.thing.each($.proxy(function(index, item){
this.material[index] = $(item).find('#material_val').val();
}, this));
}, this);
}
答案 1 :(得分:4)
尝试这个,很简单。
function Conclude (thing){
var _this = this;
this.quant = thing.find('#quantity_material').val();
this.thing = thing;
this.material =[];
this.finish = [];
this.make = function (){
var i=0;
this.thing.each(function(){
_this.material [i]= $(this).find('#material_val').val();
i++;
});
}
}