2012-05-12 17 views
1

配列をループしてこのコードを終了するのに助けが必要です。私の配列はXMLファイルから作成されます。 XMLファイルには、マップ上にプロットされる会議場所データが含まれています。配列は次のようになります。マップのループスルー配列

markerfilter[0].name 
markerfilter[0].address 
markerfilter[0].Meeting_Type 
etc... 
markerfilter[1].name 
markerfilter[1].address 
markerfilter[1].Meeting_Type 
etc... 

今、すべてのマーカーが地図上にプロットされています。配列をループし、いくつかの変数に基づいてフィルタリングする必要があります。これは配列をループする試みです:

for (var i = 0; i < markerfilter.length; i++) { 
    if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){ 
     //need to plot the points on the map here 
     }else{ 
     //need to show blank map 
     } 
    } 

ここに私のコード全体があります。ループが適切な場所にあるのか、コードの他の部分がループの中に入る必要があるのか​​分かりません。どんな助け?私は私の現在の実行時に

$(document).ready(function() { 
    $("#map").css({ 
    height: 500, 
    width: 600 
}); 
var myLatLng = new google.maps.LatLng(43.653823, -79.382843); 
MYMAP.init('#map', myLatLng, 11); 

$("#showmarkers").click(function(e){ 
    MYMAP.placeMarkers('include/xml.php'); 
}); 
}); 

var MYMAP = { 
map: null, 
bounds: null 
} 

MYMAP.init = function(selector, latLng, zoom) { 
var myOptions = { 
    zoom:zoom, 
    center: latLng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 
this.map = new google.maps.Map($(selector)[0], myOptions); 
this.bounds = new google.maps.LatLngBounds(); 
} 

var markerfilter = []; 
MYMAP.placeMarkers = function(filename) { 
$.get(filename, function(xml){ 
    $(xml).find("marker").each(function(){ 
     var name = $(this).find('name').text(); 
     var address = $(this).find('address').text(); 
     var address2 = $(this).find('address2').text(); 
     var Meeting_Type = $(this).find('Meeting_Type').text(); 
     var Time_of_Meeting = $(this).find('Time_of_Meeting').text(); 
     var Day_of_Meeting = $(this).find('Day_of_Meeting').text(); 
     var Open_Meeting = $(this).find('Open_Meeting').text(); 
     var Wheelchair = $(this).find('Wheelchair').text(); 
     var ASL = $(this).find('ASL').text(); 
     var Comments = $(this).find('Comments').text(); 
     // create a new LatLng point for the marker 
     var lat = $(this).find('lat').text(); 
     var lng = $(this).find('lng').text(); 
     var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng)); 

     var markerdata = {}; 
     $(this).children().each(function() { 
      markerdata[this.tagName] = $(this).text(); 
     }); 
     markerfilter.push(markerdata); 

     var MeetingType = document.getElementById("Meeting_Type"); 
     var type = MeetingType.options[MeetingType.selectedIndex].text; 
     var DayofMeeting = document.getElementById("Day_of_Meeting"); 
     var day = DayofMeeting.options[DayofMeeting.selectedIndex].text; 
     var TimeofMeeting = document.getElementById("Time_of_Meeting"); 
     var time = TimeofMeeting.options[TimeofMeeting.selectedIndex].text; 

     for (var i = 0; i < markerfilter.length; i++) { 
     if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){ 
      markerfilter[i].setMap(MYMAP.map); 
      }else{ 
      markerfilter[i].setMap(null); 
      } 
     } 

     // extend the bounds to include the new point 
     MYMAP.bounds.extend(point); 

     var marker = new google.maps.Marker({ 
      position: point, 
      map: MYMAP.map 
     }); 

     var infoWindow = new google.maps.InfoWindow(); 
     var html='<b><u>'+name+'</b></u><br />'+address2+'<br />'+address+'<br />'+Meeting_Type+',&nbsp'+Time_of_Meeting+',&nbsp'+Day_of_Meeting+'<br />Open Meeting:&nbsp'+Open_Meeting+'<br />Wheelchair Accessible:&nbsp'+Wheelchair+'<br />ASL:&nbsp'+ASL+'<br />Comments:&nbsp'+Comments; 
     google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(MYMAP.map, marker); 
     }); 
     MYMAP.map.fitBounds(MYMAP.bounds); 
    }); 
}); 
console.log(markerfilter); 
} 

は今のところ、放火犯は私に語った: markerfilter [i]を.setMap(ヌル)は関数ではありません。

+0

そのコードはどうなりますか? –

答えて

0

エラーについて:markerfilter [i] .setMap(null)は関数ではありません、私はあなたの問題を見ると思います。 MYMAP.placemarkers機能の中で、あなたがmarkerdataオブジェクトを作成し、テキスト値を割り当てられているtagNameプロパティのいくつかの種類を定義し、次に上にmarkerdataをプッシュ:彼markerfilter配列:

var markerdata = {}; 
$(this).children().each(function() { 
    markerdata[this.tagName] = $(this).text(); 
}); 
markerfilter.push(markerdata); 

は、その後、約10行後に、あなたが持っていますmarkerfilter配列ががロードされているため

for (var i = 0; i < markerfilter.length; i++) { 
    if (markerfilter[i].Meeting_Type==type && 
      markerfilter[i].Day_of_Meeting==day && 
      markerfilter[i].Time_of_Meeting==time) { 

     markerfilter[i].setMap(MYMAP.map); 
    } 
    else { 
     markerfilter[i].setMap(null); 
    } 
} 

:コードが期待するように見えるものを取得しようforループはmarkerfilter配列からのマーカーとなりますにはマーカーが含まれていないので、markerfilter[i]はマーカーではないため、markerfilter[i].setMap(null)は機能ではありません。これがうまくいくことを願って -

+0

あなたは正しかった!マーカーが作成された後、マーカーオブジェクトで配列をロードする必要がありました。火かき棒はこれに大きく貢献しました! –

関連する問題