2012-02-07 12 views
1

多角形を表示するときにIE9がマウスクリックを発していません。私がテストした他のすべてのブラウザ(IE8を含む)は正常に動作します。私は問題がクリックを伝播しないsvgオブジェクトと関係があると思うが、それを修正する方法はわからない。どんな助けでも大歓迎です。Bing Ajax v7がIE9でクリックイベントを発生しない

私は描画コードを削除しました。下のコードを使用すると、地図をクリックして描画を開始し、元のポイントの下をもう一度クリックし、マウスを左に移動してクリックすることで再現できます。

注:マップをダブルクリックすると、クリックイベントが発生します。また、私がmousemoveに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> 

答えて

0

はい、少し不思議です。移動イベントを無効にすると、IE9は毎回clickイベントを取得するため、両方のマップイベントの組み合わせと関係します。

いくつか遊んでいるうちに、イベントをclickからmousedownに変更すると問題が解決されました。おそらく、mousedownが呼び出されてからmousemoveが干渉する可能性があるからでしょうか?

関連する問題