谷歌地图动态更改信息窗口



关于谷歌地图API v3的非常简单的问题。

我想更改 a> 标签的点击事件上的文本。这工作正常,但是当信息窗口关闭并重新打开时,文本将被重置。

条件:地图上将有多个标记。

这是我定义它在 For 循环中实际调用的标记的代码(没有发布):

contentString = 
    '<div id="infoContent">' +
    '<div id="siteNotice">' +
    '<h4 id="firstHeading" class="firstHeading">Store ' + 
    Store[x].StoreNumber + 
    ' - ' + 
    Store[x].Location + 
    '</h4>' +
    '<div id="bodyContent">' +
    '<ul>' +                          
    '<li><a onclick = "addDispatch(this,' + Store[x].DailyDispatchID +')"> Add </a></li>' +
    '</ul>' +
    '</div></div>';

infowindow = new google.maps.InfoWindow({
    content: contentString
});
bindInfoWindow(marker, map, infowindow, contentString)
function bindInfoWindow(marker, map, infowindow, strDescription) {            
    google.maps.event.addListener(marker, 'click', function () {
        infowindow.setContent(strDescription);
            infowindow.open(map, marker);
        });
    }

如您所见,在内容字符串中,我定义了一个调用"addDispatch"的 onclick 事件。函数在这里:

function addDispatch(element, DispatchId) {            
    if (element.text == "Add") {
        $(element).text("Remove");
    } else {
        debugger;
        $(element).text("Add");
    }            
}

更改文本可以正常工作,但是一旦我重新打开信息窗口,它就会恢复为默认值。

有人有什么想法吗?

我猜是因为事件处理程序绑定到标记窗口的内容字符串。

我已经上下搜索了所有内容,但找不到解决方案。提前谢谢。

(请原谅调试器代码)

当您使用字符串作为content时,每次打开信息窗口时都会解析此字符串。

当您

关闭信息窗口时,将基于您的内容属性创建的 DOMNode 将被丢弃。

解决方案:使用 Node 而不是字符串作为内容属性。已应用于此节点的更改将是永久性的(当您关闭信息窗口时,该节点将与文档分离,但它仍然存在,并在您下次打开信息窗口时再次用作内容)

演示:http://jsfiddle.net/doktormolle/TLs8P/

最新更新