javascript - 未捕获的类型错误:无法读取 undefined::javascript::bing map 的属性 'add'

标签 javascript bing-maps

所以我在使用这个 displayinfobox 函数时遇到问题。我正在研究 Bing Maps v8 API,试图将事件与信息框链接起来。我正在关注 Bing 并将事件处理程序存储在信息框对象中。我收到此读取属性“添加”错误。

在堆栈跟踪中,它会将我带到添加事件处理程序的行,或者当我检查信息框是否附加了任何事件时。

我试图在这里遵循这个脚本 https://blueric.wordpress.com/2011/03/10/creating-hover-style-info-boxes-on-the-bing-maps-ajax-v7-0-control/ 。鉴于它已经很老了,我认为事情可能会以类似的方式工作。

已编辑:

它似乎与我感到困惑的 addHandler 有关。

 function displayInfoBox(e) {

    stopInfoBoxTimer(e);

    console.log("after Infobox Timer");

    if (_displayInfoType != "INFOBOX")
        return;

    var replaceContent = infoboxTemplate;
    var ticket = e.target.ticket;
    var contentHead = "<ul>";
    var contentEnd = "</ul>";
    var content = "";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>";
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>";

    if (ticket.WW_PK != "")
        content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ ", " + ticket.{REMOVED VAR}+ "</li>";
    else
        content += "<li><b>: <span  style='color:red;'>{REMOVED VAR}</span></b></li>";


    replaceContent = replaceContent.replace('{title}', ticket.{REMOVED VAR});
    replaceContent = replaceContent.replace('{content}', contentHead + content + contentEnd);

    console.log("after replaced content");
    var options = {
        offset: new Microsoft.Maps.Point(23, 173),
        location: e.target.getLocation(),
        htmlContent: replaceContent,
        visible: true
    };

    console.log(options);

    console.log("before removing events from infobox");
    if (infobox != null && infobox.mouseLeaveHandler != null && infobox.mouseEnterHandler != null) {

        if (Microsoft.Maps.Events.hasHandler(infobox, 'mouseleave'))
            Microsoft.Maps.Events.removeHandler(infobox.mouseLeaveHandler);

        if (Microsoft.Maps.Events.hasHandler(infobox, 'mouseenter'))
            Microsoft.Maps.Events.removeHandler(infobox.mouseEnterHandler);

        infobox = null;
    }
    console.log("after removing events from infobox");
    console.log(infobox);
    infobox = new Microsoft.Maps.Infobox(location, options);
//-------------------------- ERROR IN HERE ---------------------------------

    infobox.mouseLeaveHandler = Microsoft.Maps.Events.addHandler(infobox, 'mouseleave', infoBoxMouseLeave);
    infobox.mouseEnterHandler = Microsoft.Maps.Events.addHandler(infobox, 'mouseenter', infoBoxMouseEnter);
//-------------------------- ERROR IN HERE ---------------------------------
    console.log(infobox.mouseEnterHandler);
    infobox.setMap(map);
 }

已编辑(最新): Bing V8 似乎存在错误,或者只是处理此代码的方式发生了变化。我已将大部分代码复制到一个 fiddle 项目中,它在 v7 中运行良好。所以我将手动执行此操作。

我将发布一次工作代码,这已经完成。

最佳答案

问题是 Infobox 类没有 mouseleave 或 mouseenter 事件。因此,当您尝试为此添加事件处理程序时,此步骤的“添加”部分会失败,因为这些事件不存在。

关于javascript - 未捕获的类型错误:无法读取 undefined::javascript::bing map 的属性 'add',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38575592/

相关文章:

javascript - 如何将多个经纬度值从数组传递到 bing map

javascript - 图像加载事件,在出现错误时自动重新加载图像

javascript - FireStore,在Web客户端进行CRUD操作安全吗?

javascript - 如何使用 JavaScript 从 BING map API 获取地址(城市、州、国家、邮政编码)?

google-maps - Google 放置的 API 与 Bing 的 API 类似吗?

java - Bing map 地理数据解压缩算法移植到 PHP

javascript - 如何从 Web API 中的 Bing map 清除群集图钉?

javascript - Laravel Echo 不使用 Auth header

javascript - 将上下文与 api 调用一起用于根级组件

javascript - 获取事件幻灯片并突出显示计数器中的相应数字