为什么我不能把我的函数放在jQuery(document).ready(function(){}中

时间:2011-11-16 19:26:11

标签: javascript jquery google-maps wordpress-plugin

为什么我不能把这个功能放在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脚本中调用函数的方式?

2 个答案:

答案 0 :(得分:2)

函数声明的范围是它在里面定义的任何函数。

如果在匿名函数内部进行函数声明(如果将它传递给document.ready则无关紧要),那么匿名函数之外的代码就无法调用它。

答案 1 :(得分:2)

如果你把你的函数放在jQuery(document).ready(function() { });中并且你的php中的函数调用不在jQuery(document).ready(function() { });中,那么在创建函数之前调用你的函数,所以在那一刻它不存在< / p>

所以但是都在jQuery(document).ready(function() { });中,并确保你的函数在被调用之前被声明。