2011-07-22 39 views
1
var circle = new google.maps.Circle({ 
    center: latLng, 
    radius: radius, 
    strokeColor: "#FF0000", 
    strokeOpacity: 0.5, 
    strokeWeight: 1, 
    fillColor: "#FF0000", 
    fillOpacity: 0.2 
}); 

circle.setMap(map); 

map.fitBounds(circle.getBounds()); 

jQuery('#area').change(function() { 
    radius = jQuery('#area').val(); 

    var newLatLng = marker.getPosition(); 

    circle.setMap(null); 

    var circle = new google.maps.Circle({ 
     center: latLng, 
     radius: radius, 
     strokeColor: "#FF0000", 
     strokeOpacity: 0.5, 
     strokeWeight: 1, 
     fillColor: "#FF0000", 
     fillOpacity: 0.2 
    }); 

    circle.setMap(map); 

    map.fitBounds(circle.getBounds()); 
}); 

circle後undefined是在jQuery('#area').change()之外定義的,但是當我嘗試從jQuery('#area').change()函數內部訪問它,我得到一個未定義的錯誤。爲什麼是這樣?可變jQuery的變化

回答

1

裏面你.change功能,改變這一行:

var circle = new google.maps.Circle({ 

這樣:

circle = new google.maps.Circle({ 

你有它的方式,你創建一個名爲circle一個新的局部變量,並設置它的值而且您沒有設置circle的全球定義值。然後,當你下一次來到並在全球範圍內致電circle.setMap(null)時,它仍然是空的。

所以,如果你只是想要在圓的全局定義上運行,那麼在.change()函數中刪除var,如上所述。如果您打算創建一個新的臨時圓對象,以便僅在該函數執行期間不會存活的.change()函數中使用,則將該名稱命名爲circle以外的其他本地副本。

3

因爲您的內部函數包含var circle。由於稱爲「var hoisting」的現象,整個函數認爲circle是局部變量,即使var語句稍後出現。

命名你的內部函數的圈子別的東西。

+0

同意jimbojw在這裏是一個小提琴演示:http://jsfiddle.net/Pks4R/ –

+0

+1很好的答案。解釋器將範圍內的所有變量聲明視爲該範圍中的第一行。 –