javascript - 为什么我会收到错误 : DISPATCH_REQUEST_ERR when trying to click on a Bing Map?

标签 javascript jquery ajax bing-maps polygon

我使用的是 Bing Maps Ajax Control 6.3,之前我成功附加了单击事件,但现在我在尝试重复相同行为的不同页面上收到以下错误:

错误:DISPATCH_REQUEST_ERR:DOM 事件异常 1

Chrome 中会引发该错误。我尝试了 IE10,控制台抛出:

错误 TypeError:无法获取未定义或 null 引用的属性“GetCurrentDefaultSymbol”

这是我加载 map 并附加事件的函数:

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);
    }
}

它处理 map 上的点击,并在点击 3 次后绘制多边形,并在点击 map 多次时继续重绘多边形。

我正在做与之前尝试完全相同的事情,但我不明白为什么它不起作用。我读过here关于错误,它说这是因为事件已经被调度而引起的,为什么会发生这种情况?

编辑

我有一些变量初始化为空,我删除了空值并且它开始工作,但是当我加载使用形状点的页面时,当我单击时开始显示以下错误:

参数无效;输入参数“points[0]”不是有效的“VELatLong”值。

我在控制台上打印了点数组,但看不出有什么问题。这是数组。

[
    {
        "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 个边的多边形显示在 map 上,但是当该页面加载并插入到div,然后我单击 map ,该点被添加到点数组中,并尝试用新数组替换当前形状的点,显示错误,即使据我在数组上看到的没有问题点。

此外,发生这种情况后,当我将鼠标悬停在图钉上时,会出现另一个错误:

无法获取未定义或空引用的属性“1359639624430”

这只发生在 IE 上。 Chrome 成功更新了形状,但一直显示 DISPATCH_REQUEST_ERR: DOM Events Exception 1 错误,而 Firefox 没有显示任何错误 对于为什么会发生这种情况有什么想法吗?

最佳答案

您的代码没有任何问题,只需使用以下 new VEMap('myMap').LoadMap(); Example 在 Chrome 中单击 Bing map 就会出现相同的错误:Fiddle .

问题出在 navigator.userAgent.indexOf("KHTML") !== -1 时应用的 Bing map Web.Browser.AttachSafariCompatibility 方法。

正如您提到的,当“the Event object is already dispatched in the tree. ”时会发生此错误 发生这种情况是因为 Bing map 正在重新调度事件示例: Fiddle .

Bing Maps Bug

事件调度和 DOM 事件流 Event dispatch and DOM event flow http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

由于浏览器根据 W3C 事件规范运行,并且问题出在您无法控制的第三方代码中,因此您的选择受到限制。您可以尝试简单地捕获(并记录)页面上的 JavaScript 错误示例:Fiddle .

关于javascript - 为什么我会收到错误 : DISPATCH_REQUEST_ERR when trying to click on a Bing Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594483/

相关文章:

javascript - socket.io 的断开、关闭和销毁方法之间的区别

javascript - tablesorter 插件,我无法使其工作

javascript - 当用户在模态窗口外单击时,如何使用 jquery 关闭 w3schools 示例中的模态窗口?

javascript - 在 spring Controller 中处理 json 对象

Javascript:在嵌套函数中使用条件语句停止代码执行

javascript - TypeScript 编译模块在自动调用函数之前声明 var

javascript - 如何使用 JS 数据表插件正确排序正常的美国日期

javascript - 如何在有序列表中插入 DOM 元素(在 Dojo 中)?

javascript - 如何从jsp页面访问javascript中使用的变量?

Javascript for 循环奇怪的行为