アプリケーションに3つのボタンがあり、ユーザーがクリックするボタンによって異なるアイコンをマップに追加できるようにします。私が持っていた問題は、ユーザーが最初にbutton1をクリックしてからbutton2をクリックすると、ユーザーがマップをクリックしたときに両方の関数が実行されるということでした。私は、ユーザーが最後にクリックしたボタンに接続されている関数を実行したいだけです。それで、私は次のコードを書いたのです。私はこのコードがなぜ機能しないのか、そしてこの問題を処理する最も賢明な方法は何だろうと思います。ユーザーが最後にクリックしたボタンに接続されている関数のみを実行する
var latestClick; //The variable to check which button the user clicked the last time
On(button1, "click", function(evt){
latestClick = "button1";
});
On(button2, "click", function(evt) {
latestClick = "button2";
});
On(button3, "click", function(evt) {
latestClick = "button3";
});
if(latestClick == "button1") {
On(map, "click", function(evt){
PictureMarkerSymbol = new PictureMarkerSymbol("images/info/info.png", 20, 20);
mapPoint = esri.geometry.webMercatorToGeographic(evt.mapPoint);
pointClick = new Graphic(new Point (evt.mapPoint), PictureMarkerSymbol);
graphics.add(pointClick);
name = prompt("Vad vill du ange för namn för denna punkt");
info = prompt("Vänligen mata in information till punkten");
url = prompt("Bifoga gärna en bild på informationspunkten");
pointClick = pointClick.setInfoTemplate(new InfoTemp(name, info + "<br>" + "<img src = " + url + ">"));
});
}
else if(latestClick == "button2") {
On(map, "click", function(evt){
PictureMarkerSymbol = new PictureMarkerSymbol("images/rastplats/rastplats.png", 20, 20);
mapPoint = esri.geometry.webMercatorToGeographic(evt.mapPoint);
pointClick = new Graphic(new Point (evt.mapPoint), PictureMarkerSymbol);
graphics.add(pointClick);
name = prompt("Ange namn på rastplatsen");
info = prompt("Ange information för rastplatsen");
url = prompt("Bifoga en bild på rastplatsen");
pointClick = pointClick.setInfoTemplate(new InfoTemp(name, info + "<br>" + "<img src = " + url + ">"));
});
}
else if(latestClick == "button3") {
On(map, "click", function(evt){
PictureMarkerSymbol = new PictureMarkerSymbol("images/matplats/matplats.png", 20, 20);
mapPoint = esri.geometry.webMercatorToGeographic(evt.mapPoint);
pointClick = new Graphic(new Point (evt.mapPoint), PictureMarkerSymbol);
graphics.add(pointClick);
name = prompt("Skriv namn på matplatsen");
info = prompt("Ange information för matplatsen");
url = prompt("Länka en bild på matplatsen");
pointClick = pointClick.setInfoTemplate(new InfoTemp(name, info + "<br>" + "<img src = " + url + ">"));
});
}
キリスト教は、コードが不完全であるようです。上記のコードによると、地図クリックイベントは決して発生してはいけません。デバッグするにはもっと見てみる必要があります。 – Will
'latestClick'の値と' map'の 'onclick'ハンドラのチェック順序を変えるべきだと思います。 'latestClick'の値は' onclick'ハンドラでチェックされなければならず、要素の 'onclick'ハンドラは一つだけ必要です。 – Himanshu