0

まず、インターネットをずっと探していて、答えが見つからなかったので、ここで質問します。

私の最近の学校のプロジェクトは、データベースに記事を追加するための管理ページを作成することです。記事はGoogleマップ上のポイントに接続されています。マップ上にポイントを追加するための要件は、ユーザーがマップを1回クリックすると、マーカーが生成されることです。マップを2回クリックすると、最初のマーカーが2番目の場所に移動します。(これは私が苦労していることです。)

問題は、コードが現在のように、markersArrayが未定義であるというエラーが発生することです。varmarkersArray =newArray;を配置すると eventListenerの下に、main.js(googlesファイル)に何か問題があり、2番目のifでmarkersArray[0]が未定義であるというエラーが表示されます。

ちなみに、古いのにグーグルマップAPIv2を使わないといけません。

    <script type="text/javascript">
//<![CDATA[

var map;
var markers = new Array;  

function load() {
  if (GBrowserIsCompatible()) {
    this.counter = 0;
    this.map = new GMap2(document.getElementById("map"));
    this.map.addControl(new GSmallMapControl());
    this.map.addControl(new GMapTypeControl());
    this.map.setCenter(new GLatLng(57.668911, 15.203247), 7);       

    GDownloadUrl("genxml.php", function(data) {
      var xml = GXml.parse(data);
      var Articles = xml.documentElement.getElementsByTagName("article");
      for (var i = 0; i < Articles.length; i++) {
        var id = Articles[i].getAttribute("id");
        var title = Articles[i].getAttribute("title");
        var text = Articles[i].getAttribute("text");
        var searchWord = Articles[i].getAttribute("searchWord");
        var point = new GLatLng(parseFloat(Articles[i].getAttribute("lat")),
                                parseFloat(Articles[i].getAttribute("lng")));
        var article = createMarker(point, id, title, text);
        this.map.addOverlay(article);           
      }
    });
  }

var myEventListener = GEvent.bind(this.map,"click", this, function(overlay, latlng) {

  if (this.counter == 0) {
    if (latlng) {
        var marker = new GMarker(latlng);
        latlng1 = latlng;
        this.map.addOverlay(marker);
        this.counter++;
        markers.push(marker); //This is where I get the error that markersArray is undefined.

  } 
} 
else if (this.counter == 1) {
  if (latlng){
    alert (markers[0]);
    this.map.removeOverlay(markers[0]);
    var markers = [];
    this.map.addOverlay(marker);
    this.counter++;
  }
} 

}); 
}

function createMarker(point, id, title, text) {
  var article = new GMarker(point);
  var html = "<b>" + title + "</b> <br/>"
  GEvent.addListener(article, 'click', function() {
    window.location = "article.php?id=" + id;

  });
  return article;
}
4

1 に答える 1

0

私は問題を解決しました。なぜそれが機能したのか正確にはわかりませんが、これは現在のように見えます:

var markersArray = [];

function load() {
if (GBrowserIsCompatible()) {
    this.counter = 0;
    this.map = new GMap2(document.getElementById("map"));
    this.map.addControl(new GSmallMapControl());
    this.map.addControl(new GMapTypeControl());
    this.map.setCenter(new GLatLng(57.668911, 15.203247), 7);       

GDownloadUrl("genxml.php", function(data) {
var xml = GXml.parse(data);
var Articles = xml.documentElement.getElementsByTagName("article");
    for (var i = 0; i < Articles.length; i++) {
        var id = Articles[i].getAttribute("id");
        var title = Articles[i].getAttribute("title");
        var text = Articles[i].getAttribute("text");
        var searchWord = Articles[i].getAttribute("searchWord");
        var type = Articles[i].getAttribute("type");
        var point = new GLatLng(parseFloat(Articles[i].getAttribute("lat")),
                                parseFloat(Articles[i].getAttribute("lng")));
        var article = createMarker(point, id, title, text);
        this.map.addOverlay(article);           
      }
    });
  }

var myEventListener = GEvent.bind(this.map,"click", this, function(overlay, latlng) {
var marker = new GMarker(latlng);
if (this.counter == 0) {
    if (latlng) {
        latlng1 = latlng;
        this.map.addOverlay(marker);    
        markersArray.push(marker);      
        this.counter++; 

  } 
 } 
else if (this.counter == 1) {
    if (latlng){
        this.map.removeOverlay(markersArray[0]);
        this.map.addOverlay(marker);
        this.counter++;
  }
} 

}); 
}

function createMarker(point, id, title, text) {
var article = new GMarker(point);
var html = "<b>" + title + "</b> <br/>"
GEvent.addListener(article, 'click', function() {
    window.location = "article.php?id=" + id;
});
return article;
}
于 2012-05-30T19:21:37.320 に答える