我的应用程序中有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 + ">"));
});
}
答案 0 :(得分:1)
我同意威尔。共享的代码不显示完整的流程。看起来没有任何map事件被初始化,因为在点击其中一个按钮之前,latestClick将是未定义的。
假设您在单击按钮后调用地图事件初始化有一些逻辑。看起来您没有调用一次,因此将创建多个地图单击Handles。在再次设置地图点击事件之前,您需要破坏先前设置的句柄。如下。
var mapClickHandle;
if(latestClick == "button1") {
mapClickHandle && mapClickHandle.remove();
mapClickHandle = 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") {
mapClickHandle && mapClickHandle.remove();
mapClickHandle = 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") {
mapClickHandle && mapClickHandle.remove();
mapClickHandle = 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 + ">"));
});
}