仅运行连接到用户上次单击的按钮的功能

时间:2016-05-24 22:30:31

标签: javascript dojo

我的应用程序中有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 + ">"));
            });
        }

1 个答案:

答案 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 + ">"));
        });
    }