Googlemaps JQuery奇怪的行为函数调用点击

时间:2017-12-11 16:33:51

标签: jquery google-maps

我是Jquery的新手,目前面临一种我不理解的奇怪行为。欢迎任何参考。

我在Googlemaps上添加了一个标记,当我点击Marker时,我会保存X和Y鼠标坐标,这样我就可以将一个框设置为该位置的动画。一切正常但是当我检查控制台和自己的数据记录盒时,我看到每次单击标记时,函数saveXandY执行+1次。

以下代码:

// addmarker on click if markermode is on
google.maps.event.addListener(map, 'click', function( event ){  
    if (markerMode == true) {
        addMarker(event.latLng);
    } 
});

function addMarker(location) {
    var image = {
        url: defaultMarkerIcon,
        scaledSize: new google.maps.Size(defaultMarkerSizeX,defaultMarkerSizeY)
    };  

    marker = new google.maps.Marker({
        position: location,
        draggable: defaultMarkerDraggable,
        icon: image,
        map: map,   
    });

    markerMode = false; 
    marker.customInfo = i;
    logData("Marker custominfo: " + marker.customInfo); 
    markers.push(marker);       
    i++;    

    map.setOptions({ draggableCursor: ''}); 
    addListener();
}

function addListener() {        
    google.maps.event.addListener(marker, 'click', function(evt) {      
        logData("Marker custominfo: " + marker.customInfo); 
        saveXandY();    
    });
}

function saveXandY() {
    $('#map').click(function(e) {
        coordsX = e.pageX;
        coordsY = e.pageY;
        logData("Set X + Y: " + e.pageX + "," + e.pageY);
        console.log("SaveXandY")
    }); 
};

// simple log to databox
function logData(console){
    $("#data").prepend(console);
    $("#data").prepend('<br />');
}

控制台如下所示:

Set X + Y: 708,164
Set X + Y: 708,164
Set X + Y: 708,164
Set X + Y: 708,164
Set X + Y: 708,164
Marker custominfo: 0
Set X + Y: 708,164
Set X + Y: 708,164
Set X + Y: 708,164
Set X + Y: 708,164
Marker custominfo: 0
Set X + Y: 712,164
Set X + Y: 712,164
Set X + Y: 712,164
Marker custominfo: 0
Set X + Y: 712,164
Set X + Y: 712,164
Marker custominfo: 0
Set X + Y: 712,164

在添加标记后,似乎在单击地图时也会执行函数saveXandY()内的代码。情况并非如此。

如果有人有建议我会很高兴:) OMER

1 个答案:

答案 0 :(得分:0)

替换:

$('#map').click(function(e) {
        coordsX = e.pageX;
        coordsY = e.pageY;
        logData("Set X + Y: " + e.pageX + "," + e.pageY);
        console.log("SaveXandY")
    }); 

用这个:

$('#map').off().on("click", function(e) {
        coordsX = e.pageX;
        coordsY = e.pageY;
        logData("Set X + Y: " + e.pageX + "," + e.pageY);
        console.log("SaveXandY")
    }); 

“关闭”将删除当前侦听器并添加新侦听器。如果可以的话,更好的解决方案是只调用一次saveXandY()。

更多关于“关闭”:http://api.jquery.com/off/