2010-09-22 101 views
2

我得到了一个函数未定义错误,我的jQuery脚本,我不知道为什么。函数没有定义

jQuery代码: http://maps.google.com/maps?file=api & V = 2 &键= ABQIAAAAhTrgZ5jvdqcEQouEpPcZ_hS81NmJwGXlxuJr8lEEo4Njw3WRVhT8auzZb55JSMDkwIaCdNkPHL5gNg”类型= “文本/ JavaScript的”>

<script type="text/javascript"> 
$(document).ready(function(){ 
var dealerName = $('.name', '.adr').text(); 
var customerName = dealerName.slice(0, - 1); 
var customerAddress = $('.street', '.adr').text() + ', ' + $('.locality', '.adr').text() + ', ' + $('.state', '.adr').text() + ', ' + $('.zipCode', '.adr').text(); 
$("#nameAddress .placeholderName").html(customerName); 
$("#nameAddress .placeholderAddress").html(customerAddress); 

     var error_address_empty  = 'Please enter a valid address first.'; 
     var error_invalid_address = 'This address is invalid. Make sure to enter your street number and city as well?'; 
     var error_google_error  = 'There was a problem processing your request, please try again.'; 
     var error_no_map_info  = 'Sorry! Map information is not available for this address.'; 


     var default_address = customerAddress; 

     var current_address = null; 
     var map    = null; 
     var geocoder   = null; 
     var gdir     = null; 
     var map_compatible = false; 

     if(GBrowserIsCompatible()) { 
      map_compatible = true; 
     } 

     function initialize_map() { 
      if(map_compatible) { 
       map   = new GMap2(document.getElementById('map_canvas'));   
       geocoder = new GClientGeocoder(); 
       show_address(default_address); 

       map.addControl(new GSmallMapControl()); 

       map.addControl(new GMapTypeControl());    
      } 
     } 

     function show_address(address) { 
      if(map_compatible && geocoder) { 
       current_address = address;  
       geocoder.getLatLng(
       address, 
       function(point) { 
        if(!point) { 
         alert(error_no_map_info); 
        } else { 
         map.setCenter(point, 13); 
         var marker = new GMarker(point); 
         map.addOverlay(marker); 
         marker.openInfoWindowHtml("<span style='font-size:14px; font-weight:bold;'>" + customerName + "<br /></span><span style='font-size:12px;'>" + address + "</span>"); 
        } 
       } 
       ); 
      } 
      return false; 
     } 

     function get_directions() { 
      if(map_compatible) { 
       if(document.direction_form.from_address.value == '') { 
        alert(error_address_empty); 
        return false; 
       } 

       document.getElementById('directions').innerHTML = ''; 

       gdir = new GDirections(map, document.getElementById('directions')); 

       GEvent.addListener(gdir, 'error', handleErrors); 

       set_directions(document.direction_form.from_address.value, current_address);    
      } 
      return false; 
     } 

     function set_directions(fromAddress, toAddress) { 
     gdir.load("from: " + fromAddress + " to: " + toAddress, 
        { "locale": "en" }); 
     } 

     function handleErrors(){ 
      if(gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) 
       alert(error_invalid_address); 
      else if(gdir.getStatus().code == G_GEO_SERVER_ERROR) 
       alert(error_google_error); 
      else if(gdir.getStatus().code == G_GEO_MISSING_QUERY) 
       alert(error_address_empty); 
      else 
       alert(error_invalid_address); 
     } 
$(window).load(initialize_map); 
}); 
</script> 

从代码HTML页面:

<div id="main-map-wrapper"> 
    <div id="seperator"></div> 
    <table width="100%" height="94"> 
     <tr valign="top"> 
      <td width="33%" colspan="3"> 
       <div id="headertextdiv"> 
        <div id="nameAddress"> 
         <span class="placeholderName" style="font-size:20px; font-weight:bold; line-height:22px;">&nbsp;&nbsp;</span> 
         <br /> 
         <span class="placeholderAddress" style="font-size:14px; font-weight:bold; line-height:22px;">&nbsp;&nbsp;</span> 
         <br /> 
         <input type="submit" onClick="return show_address('5930 West Plano Pkwy, Plano, Texas, 75093');" value="Center Map on Dealership"> 
        </div> 
       </div> 
      </td> 
     </tr> 
    </table> 
    <div id="map_canvas">&nbsp;&nbsp;</div> 
    <form name="direction_form" onSubmit="get_directions(); return false;" class="form"> 
     <span style="font-size:18px; font-weight:bold;">Need directions?</span> 
     <br /> 
     <span style="font-size:14px; margin-top:7px;">Enter your address below to get turn-by-turn directions:</span> 
     <br /> 
     <input type="text" name="from_address" class="form-field" /> 
     <input type="submit" value="Get Directions" class="form-submit" style="margin-left:10px;" /> 
    </form> 
    <a name="directions_table">&nbsp;&nbsp;</a> 
    <div id="directions">&nbsp;&nbsp;</div> 
</div> 
<div class="footer-fix">&nbsp;&nbsp;</div> 

问题: 无论如何,正如您在代码中所看到的,我首先设置了所有变量(包括customerName和customerAddress,这是本例中最重要的变量)。然后,我有四个函数,并在脚本结束时初始化地图。除了html页面上的两件事外,所有东西都可以工作。有一个“onClick”来中心地图不工作,表单提交不起作用。

我相信这是因为我有ready处理程序中设置的功能。我被告知我需要将函数绑定到它的处理程序中,就像我在initialize_map中一样。我试图做到这一点,但我尝试的一切都不起作用。附注和有用的提示可能:show_address立即运行,以启动地图时,我打电话initialize_map;然而,当您点击按钮“经销商中心地图”时,它也应该被调用。只有在您提交表单时才会调用get_directions

截至目前,当页面加载时,所有内容都显示正确;然而,当我点击“经销商中心地图”或提交表单时,我得到一个javascript错误,告诉我该函数没有定义。

我对此停滞不前。不知道如何正确运作。任何帮助是极大的赞赏。谢谢!

+0

什么函数没有定义它通常会告诉你什么行也加载谷歌地图和jQuery? – mcgrailm 2010-09-22 20:29:37

+0

show_address和get_directions ...当我点击两个按钮中的一个时出现错误 – RyanPitts 2010-09-22 20:31:07

+0

是的,JQuery和Google地图都加载了。 – RyanPitts 2010-09-22 20:31:40

回答

16

这是因为你的show_addressget_directions仅定义document.ready处理程序的范围内,你需要的,如果你想通过嵌入式脚本打电话给他们,移动的功能外还有。

+0

好的,但如果我将'show_address'移动到'ready'处理程序之外,'initialize_map'会因为它使用该函数而中断吗? – RyanPitts 2010-09-22 20:36:04

+1

@RyanPitts - Nope,外部作用域中的函数对于其内部的作用域中的某个函数是可见的,但反之亦然...如果将它们移动到外部(不会中断任何引用*这些函数*使用..移动外面的东西,比如'geocoder'变量等等),然后你就全部设置好了。 – 2010-09-22 20:38:33

+0

我不认为这是真的......我有我的代码页上设置相同的方式在这里看到http://stackoverflow.com/questions/3726646/problem-creating-markers-from-json/3726781# 3726781非常相似的senerio并不意味着它的良好做法,尽管 – mcgrailm 2010-09-22 20:38:48