2010-09-17 110 views
1

我將下面的腳本放置在頁面的HEAD中。加載頁面時,地圖應該初始化。這個謎題有兩個部分,一個是document.ready中的腳本,它設置所有變量並配置我想要放置在頁面上的地圖。第二部分是啓動地圖的window.onload=initialize_map;javascript函數沒有運行

我相信一切都運行正常,但是,我不確定。我所知道的是,initialize_map函數永遠不會運行。我甚至試圖用initialize_map();設置一個onclick按鈕來嘗試手動啓動地圖,但它仍然不起作用。我的代碼有問題嗎?任何幫助是極大的讚賞。

謝謝!

CODE題:

<script src= "http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAhTrgZ5jvdqcEQouEpPcZ_hS81NmJwGXlxuJr8lEEo4Njw3WRVhT8auzZb55JSMDkwIaCdNkPHL5gNg" type="text/javascript"> </script> 

<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.onload=initialize_map; 
</script> 
+0

感謝編輯....我只是工作這一點。 – RyanPitts 2010-09-17 19:16:17

回答

1

兩個問題跳出來的時候了:

  1. initialize_map是不是在全球範圍內(這是匿名ready事件處理程序中定義),所以你可能分配一個未定義值的window.onload,因爲您已將賦值本身放在該函數之外(在全局範圍內)。

  2. 你爲什麼要混合jQuery的ready處理程序與window.onload?在最壞的情況下,這是平坦的不起作用 - from the jQuery documentation

    .ready()方法通常與屬性不兼容。如果必須使用加載,請不要使用.ready()或使用jQuery的.load()方法將加載事件處理程序附加到窗口或更具體的項目(如圖像)。

    ...甚至在最好的情況下,這是沒有必要的。使用jQuery雙方還是沒有:

    $(document).ready(function(){ 
    
        ... 
    
        $(window).load(initialize_map); 
    
        ... 
    
    }); 
    
+0

真的沒有理由爲什麼我用兩種方法,除了我在兩個不同的時間編輯它們,並沒有意識到我已經這樣做了。謝謝你的提示! – RyanPitts 2010-09-17 19:23:34

+0

@Ryan:實際上,#1是最關鍵的 - 現在,你的初始化函數完全無法被代碼使用,所以它永遠不會被調用。你必須在其他任何事情之前解決這個問題 - 我給#2的建議實際上會解決這兩個問題。 – Shog9 2010-09-17 19:30:46

+0

好的,我試圖將window.onload更改爲JQuery加載,以查看是否有幫助。謝謝!將$(window).load(ini​​tialize_map);放入$ – RyanPitts 2010-09-17 19:34:03

1

你的函數的整個身體是依賴於布爾變量map_compatible是真實的if語句。你確定這是真的嗎?

嘗試在if語句之前放置一個警報,看看它是否以這種方式運行。也許打印出map_compatible的值。

如果不是這樣,那麼你可以使用像firebug這樣的工具來瀏覽你的javascript,看看它爲什麼沒有被設置爲true,就像你期望的那樣。

+0

我會研究這個...正確的if語句上面我正確設置default_address變量,對吧? – RyanPitts 2010-09-17 19:24:30

+0

它正在返回真正的順便說一句。 :) – RyanPitts 2010-09-17 19:51:06