Javascript未定义但公式存在

时间:2015-02-11 03:17:02

标签: javascript

我真的在这个问题上摸不着头脑。我收到一个错误,计算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){
    ... 
  };
});

3 个答案:

答案 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