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
是在jQuery('#area').change()
之外定义的,但是当我尝试从jQuery('#area').change()
函数内部访问它时,我得到一个未定义的错误。这是为什么?
答案 0 :(得分:3)
因为你的内部函数包含var circle
。由于称为“var hoisting”的现象,整个函数将circle
视为局部变量,即使var语句稍后出现。
将内部函数的圆圈命名为其他内容。
答案 1 :(得分:1)
在.change函数中,更改以下行:
var circle = new google.maps.Circle({
到此:
circle = new google.maps.Circle({
您拥有它的方式,您创建了一个名为circle
的新局部变量并设置了它的值,而您没有设置circle
全局定义的值。然后,当你下次进来并在全局一个上调用circle.setMap(null)
时,它仍然是空的。
因此,如果您只想操作圆的全局定义,请在var
函数中删除.change()
,如上所述。如果您打算创建一个新的临时圈子对象,仅在该.change()
函数期间使用,该函数在该函数执行后不会存在,则将该本地复制命名为circle
以外的其他内容。