2012-02-07 3 views
1

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

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

Примечание. Если вы дважды щелкните по карте, она запустит событие click. Кроме того, если я не нарисую tempShape на mousemove, он будет работать. Кроме того, будут работать события 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> 

ответ

0

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

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

Смежные вопросы