我真的在这个问题上摸不着头脑。我收到一个错误,计算helper未定义...但....在函数中是不是正确?我首先认为这是一个订单,所以我甚至将整个var calculateHelper
移到if(valuesArr)
语句之上,或者将它移到buy_vs_rent
事件处理程序之外,没有一个帮助。
$('#buy_vs_rent_calculate').on('click', function(){
if(valuesArr.length === 1){
setTimeout("calculateHelper(valuesArr[0])",100);
} else {
alert("Please set three of the four values using the sliders; leave only one field blank to be calculated")
}
var calculateHelper = function(valueToCalc){
...
};
});
答案 0 :(得分:5)
当您将字符串传递给setTimeout
时,它将被解析为在全局上下文中进行编码。但是,您的calculateHelper
被定义为局部变量。
$('#buy_vs_rent_calculate').on('click', function(){
if(valuesArr.length === 1){
setTimeout(function () { calculateHelper(valuesArr[0]); },100);
} else {
alert("Please set three of the four values using the sliders; leave only one field blank to be calculated")
}
var calculateHelper = function(valueToCalc){
...
};
});
答案 1 :(得分:1)
因为calculateHelper
是在本地定义的并且调用函数(calculateHelper(valuesArr[0])
)并不能使它成为函数(如@ Spencer Wieczorek所述) - > setTimeout
第一个参数必须是函数引用,将其更改为以下内容:
$('#buy_vs_rent_calculate').on('click', function(){
var calculateHelper = function(valueToCalc){
...
}; // move up
if(valuesArr.length === 1){
setTimeout(function(){
calculateHelper(valuesArr[0]); // don't use string for local function
},100);
} else {
alert("Please set three of the four values using the sliders; leave only one field blank to be calculated")
}
});
答案 2 :(得分:1)
您应该将setTimeout调用为
setTimeout(function() { calculateHelper(valuesArr[0]); } ,100);
有关详细信息,请参阅此函数documentation。