Bing Ajax v7 не запускает события кликов с IE9 - PullRequest
1 голос
/ 07 февраля 2012

IE9 не запускает щелчок мыши при отображении многоугольника.Любой другой браузер, с которым я тестировал (включая IE8), работает нормально.Я думаю, что проблема связана с тем, что объект svg не передает щелчок, но я не уверен, как это исправить.Любая помощь будет принята с благодарностью.

Я сократил наш код для рисования, чтобы помочь.Используя приведенный ниже код, вы можете воспроизвести его, щелкнув карту, чтобы начать рисование, снова щелкнув мышью под исходной точкой, а затем переместив мышь влево и попытавшись щелкнуть мышью.

Примечание. Если дважды щелкнуть карту, будет запущено событие щелчка.Также, если я не нарисую tempShape на движении мыши, это будет работать.Кроме того, события mouseup и mousedown будут работать, но это будет мешать возможности перетаскивать карту во время рисования.Вот пример кода:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>
Bing Map 
</title> 
<style type="text/css">
    #divMap
    {
        height: 500px !important;
        width: 940px !important;
    }
</style>
</head>
<body onload="init();">
    <div id="divMap" style=""></div>


<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>


<script type="text/javascript" language="javascript">
    //<![CDATA[


    var self = {
        map: null,
        drawing: {
            points: [],
            tempPoints: [],
            stopPolygon: null,
            shapeLayer: null
        }
    };


    function init() {
        self.map = new Microsoft.Maps.Map(document.getElementById('divMap'), {
            credentials: "Key",
            zoom: 15,
            center: { latitude: 45.9213475137949, longitude: -90.4466233402491 }
        });


        Microsoft.Maps.Events.addHandler(self.map, 'click', drawPolyMouseClickEvent);
        self.drawing.shapeLayer = new Microsoft.Maps.EntityCollection();
        self.map.entities.push(self.drawing.shapeLayer);
    }


    function drawPolyMouseClickEvent(e) {
        var x = e.getX();
        var y = e.getY();
        var point = new Microsoft.Maps.Point(x, y);
        var loc = self.map.tryPixelToLocation(point);
        var mouseMove = Microsoft.Maps.Events.addHandler(self.map, 'mousemove', drawPolyMouseMoveEvent);
        self.drawing.points.push(loc);
        if (self.drawing.points.length == 1) {
            self.drawing.stopPolygon = new Microsoft.Maps.Pushpin(loc, { text: " ", textOffset: new Microsoft.Maps.Point(0, 0) });
            self.drawing.shapeLayer.push(self.drawing.stopPolygon);
        }
    }


    function drawPolyMouseMoveEvent(e) {
        var x = e.getX();
        var y = e.getY();
        var point = new Microsoft.Maps.Point(x, y);
        var loc = self.map.tryPixelToLocation(point);
        self.drawing.tempPoints = self.drawing.points.slice(0, self.drawing.points.length);
            self.drawing.tempPoints.push(loc);
        self.drawing.shapeLayer.remove(self.drawing.tempShape);
        if (self.drawing.tempPoints.length == 2) {
            self.drawing.tempShape = new Microsoft.Maps.Polyline(self.drawing.tempPoints);
            self.drawing.shapeLayer.push(self.drawing.tempShape);
        }
        else if (self.drawing.tempPoints.length > 2) {
            self.drawing.tempShape = new Microsoft.Maps.Polygon(self.drawing.tempPoints);
            self.drawing.shapeLayer.push(self.drawing.tempShape);
        }
    }
    //]]>
</script>


</body>
</html>

1 Ответ

0 голосов
/ 09 февраля 2012

Да, ведет себя немного странно. Это как-то связано с комбинацией обоих событий карты, потому что если вы отключите событие перемещения, то IE9 каждый раз получит событие click.

Когда я немного поигрался, я обнаружил, что изменение события с click на mousedown решило проблему. Возможно, это потому, что mousedown вызывают до того, как mousemove получит шанс вмешаться?

...