2

Bing Maps Ajax Control 6.3を使用していて、以前はクリックイベントを添付することに成功しましたが、同じ動作を繰り返そうとすると、別のページで次のエラーが発生します。

Error: DISPATCH_REQUEST_ERR: DOM Events Exception 1

そのエラーはChromeでスローされます。IE10を試してみたところ、コンソールがスローされました。

error TypeError: Unable to get property 'GetCurrentDefaultSymbol' of undefined or null reference

これは、マップをロードしてイベントを添付する関数です。

function GetMap() {
    map = new VEMap('myMap');
    map.SetDashboardSize(VEDashboardSize.Tiny);
    var latLong = new VELatLong(16.864061, -99.882588);
    map.LoadMap();
    map.SetCenterAndZoom(latLong, 15);

    map.AttachEvent("onclick", MouseHandler);
    map.AttachEvent("ondoubleclick", MouseHandler);
}

これは私のハンドラーです:

function MouseHandler(e) {
    try{
        var pixel = new VEPixel(e.mapX, e.mapY);
        var latLong = map.PixelToLatLong(pixel);
        points.push(latLong);
        if (points.length > 2 && shapeCreated) {
            shape.SetPoints(points);
        }
        if (points.length == 3 && !shapeCreated) {
            shape = new VEShape(VEShapeType.Polygon, points);
            map.AddShape(shape);
            shapeCreated = true;
        }
    }
    catch(e)
    {
        console.error(e);
    }
}

これは、マップ上で行われたクリックを処理し、3回のクリック後にポリゴンを描画し、マップがさらにクリックされたときにポリゴンを再描画し続けます。

以前の試みとまったく同じことをしていますが、なぜそれが機能しないのかわかりません。エラーについてここで読みましたが、イベントがすでにディスパッチされていることが原因であると表示されていますが、なぜそれが発生しているのですか?

編集

いくつかの変数をnullとして開始し、nullを削除して機能し始めましたが、図形のポイントを使用するページを読み込んだ瞬間に、クリックすると次のエラーが表示され始めます。

Invalid argument; input argument 'points[0]' is not a valid 'VELatLong' value.

ポイントの配列をコンソールに印刷しましたが、何も問題はありません。これが配列です。

[
    {
        "Latitude": 16.86689437290364,
        "Longitude": -99.90971088343942,
        "Altitude": null,
        "AltitudeMode": null,
        "_reserved": null
    },
    {
        "Latitude": 16.861596373665986,
        "Longitude": -99.905676841081,
        "Altitude": null,
        "AltitudeMode": null,
        "_reserved": null
    },
    {
        "Latitude": 16.860199977046786,
        "Longitude": -99.89400386744819,
        "Altitude": null,
        "AltitudeMode": null,
        "_reserved": null
    },
    {
        "Latitude": 16.864265926727835,
        "Longitude": -99.89550590515138,
        "Altitude": null,
        "AltitudeMode": null,
        "_reserved": null
    }
]

たとえば、そのページを呼び出してdivに挿入する前に、3点の図形を作成すると、3辺のマップに表示されるポリゴンが得られますが、そのページが読み込まれてdivに挿入されると、次に、マップをクリックすると、ポイントがポイント配列に追加され、現在の形状のポイントを新しい配列に置き換えようとします。ポイントの配列で確認できる限り問題はありませんが、そのエラーが表示されます。

また、これが発生した後、マウスをピンに合わせると、別のエラーが表示されます。

Unable to get property '1359639624430' of undefined or null reference

これはIEでのみ発生します。Chromeはなんとか形を更新しましたが、エラーを表示し続けDISPATCH_REQUEST_ERR: DOM Events Exception 1、Firefoxはエラーを表示しませんこれがなぜ起こっているのかについてのアイデアはありますか?

4

1 に答える 1

3

コードに問題はありません。ChromeでBingMapsをクリックすると、次のnew VEMap('myMap').LoadMap(); で同じエラーが発生します:Fiddle

問題は、のときに適用されるBingMapsWeb.Browser.AttachSafariCompatibilityメソッドにありnavigator.userAgent.indexOf("KHTML") !== -1ます。

前述のように、このエラーは「イベントオブジェクトがすでにツリーにディスパッチされている」場合に発生します。これは、Bing Mapsがイベントを再ディスパッチしているために発生しています。Fiddle

BingMapsのバグ

イベントディスパッチとDOMイベントフロー イベントディスパッチとDOMイベントフロー http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

ブラウザはW3Cイベントの仕様に従って動作しており、問題は制御できないサードパーティのコードにあるため、オプションは制限されています。ページのJavaScriptエラーを単純にトラップ(およびログ記録)してみてください。Fiddle

于 2013-07-16T03:56:25.143 に答える