为什么我不能把这个功能放在jQuery(document).ready(function() { }
里面?
function csf_map_maker_js( args ) {
// Default js args. Args passed to function will override these.
var default_args = {
width : 610,
height : 400,
latitude : 37.93,
longitude : -75.09,
zoom : 8,
mtype: 'ROADMAP',
encoded_points: ' blah blah',
id: 'csf_map_canvas',
hood: 'My Neighborhood'
};
for ( var index in default_args ) {
if ( typeof args[index] == "undefined" ) {
args[index] = default_args[index];
}
}
var latlng = new google.maps.LatLng(args['latitude'], args['longitude']);
var encodedPoints = args['encoded_points'];
var decodedPoints = google.maps.geometry.encoding.decodePath(encodedPoints);
var myOptions = {
zoom: parseInt( args['zoom'] ),
center: latlng,
mapTypeId: google.maps.MapTypeId[args['mtype']],
streetViewControl: true,
zoomControl: true,
panControl: true
};
csf_map = new google.maps.Map(document.getElementById( args['csf_id'] ), myOptions);
var encodedPolygon = new google.maps.Polyline ({
strokeColor: "#0000FF",
strokeOpacity: 0.55,
strokeWeight: 5,
path: decodedPoints,
fillOpacity: 0,
clickable: false,
map: csf_map
});
}
如果我把它放在外面,(文件).ready阻止它工作,(虽然我认为在地图加载之前会调用其他一些函数)。该代码适用于WordPress插件。
该函数在php脚本中调用如下:
$csf_map_output .= '<div id="csf_map_canvas" style="width:'. $atts['width'].'px; height: '. $atts['height'] .'px;"></div>';
$csf_map_output .= '<script>var csf_map_params = ' . json_encode( $atts ) . '; csf_map_maker_js( csf_map_params );</script>';
return $csf_map_output;
当我在jQuery(document).ready(function() { }
内时,是否需要更改php脚本中调用函数的方式?
答案 0 :(得分:2)
函数声明的范围是它在里面定义的任何函数。
如果在匿名函数内部进行函数声明(如果将它传递给document.ready则无关紧要),那么匿名函数之外的代码就无法调用它。
答案 1 :(得分:2)
如果你把你的函数放在jQuery(document).ready(function() { });
中并且你的php中的函数调用不在jQuery(document).ready(function() { });
中,那么在创建函数之前调用你的函数,所以在那一刻它不存在< / p>
所以但是都在jQuery(document).ready(function() { });
中,并确保你的函数在被调用之前被声明。