Lajos Arpad
Lajos Arpad

Reputation: 76892

Google Maps Use Case has a JS error in Firefox

I have a FF error about the info window in GM. Here is the source code:

var lats;
var longs;
var k;

function initialize() {
    //parentArray is an object where the elements of the parent page are stored
    var parentArray = window.parent.params;
    lats = parentArray["lat"].replace(/^\|+|\|+$/g, '').split("|");
    longs = parentArray["long"].replace(/^\|+|\|+$/g, '').split("|");
    k = parentArray["keys"].replace(/^\|+|\|+$/g, '').split("|");
    var myLatlng = new google.maps.LatLng(parseFloat(lats[0]), parseFloat(longs[0]));
    var myOptions = {
        zoom: 20,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    //contentString is built based on the array passed by the parent page

    for (var i = 0; i < lats.length; i++) {
        var contentString = '<div id="content"' + i + '><b>' + k[i] + '</b>';
        for (var f in parentArray)
            if ((f !== "long") && (f !== "lat") && (f !== "keys") && (parentArray[f].substring(0, 1) !== "<")) {
                    contentString += '<br />' + f + ': ' + parentArray[f];
            }
        contentString += '<br /></div>';

        var infowindow = new google.maps.InfoWindow({
            content: contentString
        });

        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(parseFloat(lats[i]), parseFloat(longs[i])),
            map: map,
            title: 'Position'
        });
        createInfoWindow(marker, contentString);

        function createInfoWindow(m, content) {
            google.maps.event.addListener(m, 'click', function () {
                infowindow.setContent(content);
                infowindow.open(map, m);
            });
        }

    }

}

params is an array with information and k is an array of keys for the markers on the google map. Does anybody know why do I have a FF error for this code?

Sample Data For params:

params['foo']: bar
params['keys']: "Start Position|End Position"
params['lat']: "12.5323703|13.5323703"
params['long']: "14.5786987|15.5786987"

EDIT: The Error is: createInfoWindow is not defined

Thanks in advance,

Lajos Arpad.

Upvotes: 0

Views: 164

Answers (1)

Gabriele Petrioli
Gabriele Petrioli

Reputation: 196197

You are defining your method inside a loop (this is bad on its own..) and you call the method before you define it ..

just moving the call below the definition fixes the issue..

    function createInfoWindow(m, content) {
        google.maps.event.addListener(m, 'click', function () {
            infowindow.setContent(content);
            infowindow.open(map, m);
        });
    }

    createInfoWindow(marker, contentString);

Demo at http://jsfiddle.net/gaby/gdLVd/


But you should really move the definition of the createInfoWindow method somewhere else..

Better demo at http://jsfiddle.net/gaby/gdLVd/1/

Upvotes: 2

Related Questions