1

我正在开发一个将 Google 地图添加到页面的 jQuery 控件。

到目前为止,一切都很好。

作为其中的一部分,我添加了一些自定义控件,允许我将单个标记放置在特定位置(用户主位置,navigator.geolocation.getCurrentPosition);再说一次,到目前为止一切都很好。

在我的自定义控件中,我还有一个地址输入字段,用户可以在其中键入搜索地址。如果我得到一个匹配项,我可以轻松添加标记。如果我得到多个结果,我想在自定义控件中添加一组链接,然后用户可以单击以从中进行选择。

这就是问题。我的代码会很好地呈现链接,但我无法将 DomListener 附加到它们。

这是将我的链接呈现到自定义控件中的 DIV 的代码

if (results.length > 1 || results[0].partial_match) {
    $(element).data("addressResults", results);
    var html ="<div>Did you mean?<br /><ul>";
    for (var i=0; (i< results.length && i < 6); i++) {
        html+= '<li><a class"selectLocation" ' +
          'item="'+i+ '" >' + results[i].formatted_address+'</a></li>';
    }
    html+= '</ul></div>';
    html+= '<a class="closeAddressResults">None of these - Back to map</a>'
    resultsPanel // previously defined jQuery selector that works fine
        .html(html)
        .removeClass('error')
        .slideDown();
}

正如我所说,这使事情变得正常并导致正确放置与类“selectLocation”的链接

通常,我会使用 jQuery 作为 $(document).on("click", ".selectLocation", function(e, data){...}); 但这是不可能的。

作为替代方案,我希望能够做的(这不起作用)是创建一个 dom 侦听器作为

var selectAddressCtrl = document.getElementByClassName('selectAddress');
google.maps.event.addDomListener(selectAddressCtrl, 'click', function(e) {...}

但是,这似乎在任何地方都不起作用。

问题似乎是链接是动态创建的,因为谷歌只将事件附加到已经存在的项目上。我可以保留 bindign 事件,但我对创建它的多个实例持谨慎态度。

有人有什么建议吗?

4

1 回答 1

1

Andrew 的评论是正确的——我发现完成这项工作的唯一方法是按照 Google 文档建议的方式创建 UI 元素,并在添加它们时进行绑定。

IE

foreach (linktoAdd)
    var link = document.createElement('a');
    (set link properties)
    google.maps.event.addDomListener(link, 'click', function(e) {...});
    (add element to UI)
}
于 2013-06-08T12:39:42.233 回答