2013-10-23 117 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