【问题标题】:jquery raty and jquery ui map adding stars to the infowindow dynamically based on data from getJson()jquery rate 和 jquery ui map 根据来自 getJson() 的数据动态地将星添加到信息窗口
【发布时间】:2014-02-02 22:48:29
【问题描述】:

我在正确配置关闭动态添加评级到 jquery ui 地图的信息窗口时遇到问题。

首先我尝试在 $.each 的 getJson 中这样做:

$(labelka).raty({ readOnly: true,  score: marker.friendly_rate});

labelka 之前设置的位置:var labelka = "#spot"+marker.id 其中marker.id 是getJson 中行的id 值,friendly_rate 是适当的数值。

结果:没有成功:

第二次尝试:我想,在你提到某些东西之前,它必须存在。所以等到 jqxhr=getJson 完成。所以在 getJson() 中,我只附加到 gloably 可见的字典 key:values 如下:

pair_mark[labelka]=marker.friendly_rate

然后在 `jqxhr.complete(function() {} 里面我试着做

jqxhr.complete(function() {

for (var key in pair_mark){
    $("#map_canvas").find(key).raty({ readOnly: true,  half  : true, score: pair_mark[key] });
}
  console.log( "second complete" );
});`

还有:没有成功

即使在尝试:

$(key).raty({ readOnly: true,  half  : true, score: pair_mark[key] })

Google Chrom 控制台(BIGGER RESOLUTION) 的屏幕截图:

并链接到源代码: https://gist.github.com/andilab/2efe76bb1ffbeeaa26ee

【问题讨论】:

    标签: jquery google-maps dom getjson jquery-ui-map


    【解决方案1】:

    有两个问题:

     var labelka = "#spot"+marker.id
     var html_part ="<div id=\""+labelka+"\"></div>";
    

    这将创建以下标记:

    <div id="#spotSomeMarkerId"></div>
    

    在 jQuery 中可能无法使用 $('#spotSomeMarkerId'); 选择此节点,因为在 &lt;div/&gt; 的 id-attribute 中必须省略 #。

    基本问题:InfoWindow 的内容是以字符串形式提供的,当 InfoWindow 的 domready-event 触发时,该内容的 DOM 可用,而不是之前。在此之前,您不能为特定的 InfoWindow 调用 $.raty()

    可能的解决方案:

    • 如前所述,等到 domready-event 触发
    • 使用 DOM 节点作为 InfoWindow 的内容,在这种情况下,您可以在创建 DOM 节点后立即调用 raty(无论该节点是否已经注入到文档中/信息窗口是否打开)

    第二种方法的代码(用它代替你的要点的第 121-123 行):

    var contencik = $('<div><h4>'+marker.name+'</h4><br>'
                        + marker.address_street
                        + ' '+marker.address_number
                        + '<br>Rating:</div>')
                      //the content is ready, it's a query-object
                      //now we append-the raty-container and call raty immediately
                      //for this container
                      .append($('<div id="spot'+marker.id+'"></div>')
                                .raty({ readOnly: true, score: marker.friendly_rate}))
                      //the content is still a jQuery-object
                      //we need a DOM-node to pass it to the 
                      //content-property of the InfoWindow
                      [0];
    

    【讨论】:

    • 我注意到哈希的问题。但它仍然不起作用。第二个提到我要测试。
    • domready-event fires 是什么意思?你的意思是:jqxhr.complete(function() ?
    • 您能否更准确地解释一下 `DOM-Node 作为 InfoWindow 的内容` 我是 jQuery 的新手。感谢您的帮助。
    • InfoWindow 的内容属性可以是字符串(带有 HTML 标记,如您当前使用的那样)或某些元素(例如 div、h4 ... 元素是所谓的 DOMNodes )。 domready 我的意思是 InfoWindow 的 domready-event,它会在 InfoWindow 的内容被注入文档后立即触发(通常在 InfoWindow 即将打开之前)。我在上面添加了一个可能的修复。
    猜你喜欢
    • 2013-05-04
    • 2012-02-22
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2015-04-27
    • 2011-06-15
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多