在下面的脚本中,console.log返回正确的值,并且两个警报都会触发。但是,价值未定义。
任何想法我做错了什么?
jQuery(document).ready(function(){
jQuery("#customfield_21070").attr('style','width:60px');
jQuery("#customfield_21070").attr('disabled','disabled');
var customfields = [
'#customfield_11070',
'#customfield_11071',
'#customfield_20071',
'#customfield_20072',
'#customfield_20073',
'#customfield_20074',
];
for(var i=0, len=customfields.length; i<len; i++) {
console.log(customfields[i]);
jQuery(customfields[i]).keyup(function(){
alert('calculate');//FIRES
calculateSum();
});
}
function calculateSum() {
var sum = 0;
alert('value: ' + this.value);//UNDEFINED
if(!isNaN(this.value) && this.value.length!=0 && this.id !== "customfield_21070") {
sum += parseFloat(this.value);
}
jQuery("#customfield_21070").val(sum.toFixed(2));
}
});
答案 0 :(得分:1)
调用具有给定
this
值和提供的参数的函数 单独
它的第一个参数是thisArg
:
this
的价值提供给乐趣。请注意,this
可能不会 是方法看到的实际值:如果方法是函数 非严格模式代码,null和undefined将替换为 全局对象和原始值将被装箱。
所以,将this
从你的处理函数传递给calculateSum
,如下所示:
jQuery(customfields[i]).keyup(function(){
calculateSum.call(this);
});
答案 1 :(得分:0)
@canon
绝对正确,正如他所说的将解决你的问题。
您可以写: -
jQuery(document).ready(function () {
jQuery("#customfield_21070").attr('style', 'width:60px');
jQuery("#customfield_21070").attr('disabled', 'disabled');
var customfields = [
'#customfield_11070',
'#customfield_11071',
'#customfield_20071',
'#customfield_20072',
'#customfield_20073',
'#customfield_20074',
];
for (var i = 0, len = customfields.length; i < len; i++) {
jQuery(customfields[i]).keyup(function () {
calculateSum(this);//Edited
});
}
function calculateSum(param) {//Edited
var sum = 0;
alert('value: ' + param.value);//UNDEFINED
if (!isNaN(param.value) && param.value.length != 0 && param.id !== "customfield_21070") {//Edited
sum += parseFloat(param.value);
}
jQuery("#customfield_21070").val(sum.toFixed(2));
}
});
这反映了alert
的正确价值。 **Tested**