Bing 地图图钉的 dragend 调用成功,但 Bing 地图移动事件继续

Bing Map pin's dragend called successfully, but Bing Map move event continues

我用过 Bing Maps AJAX Control,版本 7.0。并在地图上显示 Pin 图。要求就像,用户可以拖放图钉,当图钉放下时,它应该移动到它的实际位置。

现在的问题是,当 pin 的 dragend 事件被调用时,pin 成功设置到它的原始位置,但是鼠标没有释放,当鼠标移动时,地图也移动了。

代码如下:

var isPinDragged = false;

Microsoft.Maps.Events.addHandler(pin, 'dragstart', startDragDetails);
Microsoft.Maps.Events.addHandler(pin, 'drag', dragDetails);
Microsoft.Maps.Events.addHandler(pin, 'dragend', endDragDetails);

function startDragDetails(e) {
    lastLocation = e.entity.getLocation();
    currentLatitude = e.entity._location.latitude;
    currentLongitude = e.entity._location.longitude;
    isPinDragged = false;

    $(e.entity.cm1002_er_etr.dom).find("img").removeClass("droppable");
}

dragDetails = function (e) {
   isPinDragged = true;
};

endDragDetails = function (e) {
    if (isPinDragged) {
        isPinDragged = false;
        $(e.entity.cm1002_er_etr.dom).find("img").addClass("droppable");
        e.entity.setLocation(new Microsoft.Maps.Location(currentLatitude, currentLongitude)); //update pin: move back to old position
    }
};

更新: 我不知道,这个信息。多少有助于解决。我的 pin 创建是动态的,会有 N 没有。每个登录用户的引脚数。

Microsoft.Maps.loadModule('Microsoft.Maps.Overlays.Style',
{
    callback: function () {
        map = new Microsoft.Maps.Map(document.getElementById("divDailyCashMap"), mapOptions);

        var center = map.getCenter();
        var loc = null;
        var pin = null;

        var pinLayers = new Microsoft.Maps.EntityCollection();
        map.entities.push(pinLayers);

        var infoboxLayers = new Microsoft.Maps.EntityCollection();
        map.entities.push(infoboxLayers);

        pinInfobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), { visible: false });
        infoboxLayers.push(pinInfobox);

        $.each(codes, function (index, item) {
            loc = new Microsoft.Maps.Location(item.Latitude, item.Longitude);
            pin = new Microsoft.Maps.Pushpin(loc, { text: '', draggable: true });
            pin.Title = item.Title;
            pin.Description = item.CodeDescription;

            Microsoft.Maps.Events.addHandler(pin, 'click', displayInfobox);
            Microsoft.Maps.Events.addHandler(pin, 'dragstart', startDragDetails);
            Microsoft.Maps.Events.addHandler(pin, 'drag', dragDetails);
            Microsoft.Maps.Events.addHandler(pin, 'dragend', endDragDetails);

            Microsoft.Maps.Events.addHandler(map, 'viewchange', hideInfobox);
            Microsoft.Maps.Events.addHandler(map, 'mousemove', mousemoveDetails);

            pinLayers.push(pin);
                 $(pin.cm1002_er_etr.dom).find('img').addClass("droppable").attr({ "data-pinid": item.Code, "data-lat": item.Latitude, "data-long": item.Longitude });
        });
    }
}

在您的 dragDetail() 函数中,尝试:

e.handled = true;

它将告诉事件引擎不应触发其他底层事件。 不行的话你也可以尝试添加:

return false;