【问题标题】:why do I get a Error: DISPATCH_REQUEST_ERR when trying to click on a Bing Map?为什么在尝试单击 Bing 地图时出现错误:DISPATCH_REQUEST_ERR?
【发布时间】:2013-01-30 00:09:38
【问题描述】:

我使用的是 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 次后绘制一个多边形,并在点击更多次地图时继续重绘多边形。

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

编辑

我有一些变量初始化为 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 没有显示任何错误关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 我认为它与您的代码无关,但它似乎与 Map 控件相关联。我在各种支持的浏览器上都试过了,唯一遇到问题的浏览器是 Chrome。
  • 是的,我试过 IE,控制台抛出了error TypeError: Unable to get property 'GetCurrentDefaultSymbol' of undefined or null reference
  • 试试这个小提琴jsfiddle.net/7Dj4v
  • 我得到了同样的错误,我不明白为什么不起作用。
  • 我也想知道如何在 Chrome 中解决这个问题。有什么想法吗?

标签: javascript jquery ajax bing-maps polygon


【解决方案1】:

您的代码没有任何问题,在 Chrome 中单击 Bing 地图也会出现同样的错误,只需使用此 new VEMap('myMap').LoadMap(); 示例Fiddle

问题出在必应地图Web.Browser.AttachSafariCompatibility 方法中,该方法在navigator.userAgent.indexOf("KHTML") !== -1 时应用。

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

事件分派和 DOM 事件流 http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

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

【讨论】:

  • 感谢您的洞察力,是的,这个问题我决定忽略它,但它在控制台上显示的频率令人不安。每个浏览器都有自己的限制,这很烦人,所以编写一个适用于每个浏览器和不同版本的干净的代码是一场噩梦。
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 2015-01-15
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多