2013-10-23 68 views
0

我一直认为,如果你在一个函数之外声明了一个javascript var,那么它将在该函数中可用并在其中使用。未定义的JavaScript变量使用kineticjs

我有一个下面的代码有问题,当我点击一个触发get_value函数的按钮时,控制台告诉我补间变量是未定义的。

<script> 
     $(document).ready(function() 
     { 
      var timeout_val = 0; 

      var stage = new Kinetic.Stage({ 
       container: 'stage', 
       width: 940, 
       height: 50 
      }); 
      var layer = new Kinetic.Layer(); 

      var line = new Kinetic.Line({ 
       points: [10, 10, 100, 10], 
       stroke: '#FF0000' 
      }); 

      layer.add(line); 
      stage.add(layer); 

      var xTo = stage.getWidth() - 10; 

      var tween = new Kinetic.Tween({ 
       node: line, 
       duration: 5, 
       points: [10, 10, xTo, 10] 
      }); 
     }); 

     function get_value(){ 
      $.ajax({ 
       type: "GET", 
       url: "players.php", 
       data: {} 
      }).done(function(result) { 
       if (result != "Timeout Error") { 
        $("#players").html(result); 
       } 
       $("table").tablesorter({widgets: ["zebra"], sortList: [[1,1], [0,0]]}); 
       timeout_val = window.setTimeout(get_value, 5000); 
      }); 
      tween.reset(); 
      tween.play(); 
     } 
    </script> 

这个脚本块在我的页面的头部,如果这有什么区别。

然后我用这样一个简单的输入按钮调用get_value函数。

<input type="button" name="submit" id="submit" value="submit" onClick = "get_value();" /> 

我很茫然,为什么这是行不通的,如果你能请赐教

谢谢 Crouz

回答

1

tween在您的通话使用的内联函数中定义到$(document).ready。因此不在get_value的范围内。

如果您在同一个ready处理程序中定义了get_value,那么它会看到该变量。或者,如果您将tween移至ready处理程序之外,因此它是全球性的,那么也会看到它。就像现在一样,它处于一个完全独立的范围内。

+0

@Jacob非常感谢,我不知道为什么我没看到这个。我现在觉得自己像个白痴。谢谢哥们。 – Crouzilles