0

こんにちは、グラフィックをクリックすると Google マップにピンが表示されるようにしようとしています。span タグの data-location 要素に必要なすべてのデータを格納しています。

<span class="showOnMap" data-location="{"lat":"51.4894805","lng":"-0.2942533000000367","name":"Brentford Towers","addr":"Green Dragon Lane\r\nBrentford TW8 0DF","pinType":"loc"}">    <img width="32" height="32" src="/images/Icons/map-icon.png">
</span> 

私のクリック機能は次のとおりです。

$('.showOnMap').click(function(){
            //alert('click');
            var myData = $(this).data('location');
            console.log(myData);
            createMarkerWithInfo(myData);
            //addToPanel(panelData);
    })

マーカーを作成する関数が原因で、渡されたデータがアラート時に未定義として表示されるか、それを使用してマーカーを作成しようとすると、コンソールに表示されますが、私が行ったことからコンソールの読み取りは、現在の状態でデータを表示するため、信頼されるべきではありません。つまり、コンソールへの実際の呼び出しが行われたときに定義されていない可能性があります。

json データが dom にある (実際には php によって生成された) ため、dom で定義されているため、なぜ未定義なのか理解できません。

function createMarkerWithInfo(myData){
        //console.log(myData);
        //coords = myData.latlng.split(','); 
        alert(myData + 'pinType: '+ myData.pinType + ' lat: '+ myData.lat + ' lng: ' +myData.lng);
        myLatLng = new google.maps.LatLng(myData.lat, myData.lng);  
        if(myData.pinType == 'loc'){
            var marker = new google.maps.Marker({
                position: myLatLng,
                map: map,
                title: myData.name,     
                icon: locimage,
                shadow: locshadow,
                shape: locshape
            });
        }
        if(myData.pinType == 'ub'){
            var marker = new google.maps.Marker({
                position: myLatLng,
                map: map,
                title: myData.name,     
                icon: ubimage,
                shadow: ubshadow,
                shape: locshape
            });
        }
        //alert('lat: '+myData.lat+','+'lng: '+myData.lng);
        // Wrapping the event listener inside an anonymous function
        // that we immediately invoke and passes the variable i to.
        (function(myData, marker) {
            // Creating the event listener. It now has access to the values of
            // myData and marker as they were during its creation
            google.maps.event.addListener(marker, 'click', function() {
                //create thecontent for the infowindow
                var content = createContent(myData);
                infowindow.setContent(content);
                infowindow.open(map, marker);
            });

        })(myData, marker);     
        markersArray.push(marker);
        markersPosArray.push(myLatLng);
        bounds.extend(myLatLng);
        map.fitBounds(bounds);
        zoomMarkers();
    }

http://2012.reelfilmlocations.co.uk/Modules/builder_areaLocs.php は私が取り組んでいるページです。奇妙なことに、同じ機能を持つ同様のページ (スタンドアロン ページではなく php インクルードを使用) があります。作品、私は両方を見て、それが未定義になっている原因も同様に違いを見ることができません) http://2012.reelfilmlocations.co.uk/locations-london-west/

4

1 に答える 1

0

何らかの理由で、json が[ ]タグでラップされていました。

alert(myData + 'pinType: '+ myData[0].pinType + ' lat: '+ myData[0].lat + ' lng: ' +myData[0].lng);

正しい値を出力します。

于 2013-03-12T14:52:05.767 に答える