функция javascript не работает - PullRequest
1 голос
/ 17 сентября 2010

У меня есть сценарий ниже, помещенный в заголовок страницы.Карта должна инициализироваться при загрузке страницы.Эта головоломка состоит из двух частей, одна из которых представляет собой скрипт в документе. Уже устанавливаются все переменные и настраивается карта, которую я хочу разместить на странице.Вторая часть - это window.onload=initialize_map;, которая запускает карту.

Я считаю, что все работает правильно, однако я точно не знаю.Все, что я знаю, это то, что функция initialize_map никогда не запускается.Я даже пытался установить нажатие кнопки на initialize_map();, чтобы попытаться вручную запустить карту, но она все еще не работала.Что-то не так с моим кодом?Любая помощь очень ценится.

Спасибо!

КОД В ВОПРОСЕ:

    <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>

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Сразу возникают две проблемы:

  1. initialize_map не находится в глобальной области видимости (он определен в обработчике анонимного ready события), поэтому вы, вероятно, назначаете неопределенноезначение для window.onload, поскольку вы поместили само назначение за пределы этой функции (в глобальной области видимости).

  2. Почему вы смешиваете обработчик ready в jQuery с window.onload?В худшем случае это совершенно не сработает - из документации jQuery :

    Метод .ready () обычно несовместим с атрибутом.Если необходимо использовать load, либо не используйте .ready (), либо используйте метод jQuery .load (), чтобы прикрепить обработчики событий загрузки к окну или к более конкретным элементам, например к изображениям.

    ..и даже в лучшем случае это не нужно.Используйте jQuery для обоих или ни для одного:

    $(document).ready(function(){
    
      ...
    
      $(window).load(initialize_map);
    
      ...
    
    });
    
1 голос
/ 17 сентября 2010

Все тело вашей функции находится в операторе if, который зависит от того, что логическая переменная map_compatible имеет значение true.Вы уверены, что это правда?

Попробуйте поставить предупреждение перед оператором if и посмотреть, работает ли он таким образом.Может быть, выведите значение map_compatible.

Если это не так, тогда вы можете использовать такой инструмент, как firebug для firefox, чтобы просмотреть ваш javascript и увидеть, почему он не установлен в true, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...