谷歌地图集群IE8问题
Google maps cluster IE8 issues
以下代码在firefox和IE9上运行良好,但在更新IE8上的标记时出现问题。我得到"SCRIPT16389:未指定的错误.main.js,第20行字符313",标记一旦装入板条箱,就不会用新的数据更新
我的newdata.json格式是
{
"points": [
{
"lat": "-28.0000",
"long": "133.1500",
"id": 0
},
{
"lat": "-28.4710",
"long": "153.3443",
"id": 1
}
]
}
下面是获取json并使用集群显示点的脚本
var map=null;
var markersArray = [];
var markerCluster= null;
google.load('maps', '3', {
other_params: 'sensor=true'
});
google.setOnLoadCallback(initialize);
function initialize() {
var mapcentre = new google.maps.LatLng(-29,135);
var mapOptions = {
zoom: 5,
center: mapcentre,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map'), mapOptions);
startTimer();
}
function startTimer(){
setInterval(function() {
deleteOverlays();//should delete any existing point and clear the cluster
addMarker();
},3000);
}
function addMarker() {
$.ajax({
type: "GET",
url: "newdata.json",
async: false,
dataType: "json",
success: function(data){
for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) {
var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long);
var marker = new google.maps.Marker({
position: latLng
});
markersArray.push(marker);
}
markerCluster = new MarkerClusterer(map, markersArray);
}
});
}
// Deletes all markers in the array by removing references to them
function deleteOverlays() {
if (markersArray.length > 0) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
if(markerCluster!= null) {
markerCluster.clearMarkers();
}
}
在IE8上,地图加载良好,初始数据显示良好,但新数据没有更新,所以我猜deleteOverlay有什么问题?
以上示例基于http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/examples/advanced_example.html?compiled
有一点是非常错误的,即for/in循环用于对象,而不是数组。我一直讨厌IE,但现在越来越多的时候,当我希望其他人都这么做的时候,它似乎会崩溃。它可能会打破这一点。在这些新奇的J-I-T年轻的whippernapper浏览器中,往往会发生的事情是,它们会命中所有键,但也会命中所有数组属性,这很愚蠢
var i = markersArray.length
while(i--){
markersArray[i].setMap(null);
}
如果不是这样,请检查HTML。如果你已经破坏了HTML,其他浏览器可能足够聪明,能够想出如何将其拼凑在一起(同样,IMO也太聪明了),而IE8将像曼哈顿项目零点的金丝雀一样踢桶。
不,真的,停止在数组中使用for/in。即使它起作用,也可能是一团糟。
添加缓存:false,触发IE8始终获取最新的json,并按预期更新标记。
function addMarker() {
$.ajax({
type: "GET",
url: "newdata.json",
async: false,
cache: false,
dataType: "json",
success: function(data){
for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) {
var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long);
var marker = new google.maps.Marker({
position: latLng
});
markersArray.push(marker);
}
markerCluster = new MarkerClusterer(map, markersArray);
}
});
}
相关文章:
- highcharts IE8重绘图表问题
- 在 ie8 中使用 e.target.tagName 或 .prop 的问题
- 地理编码器 - IE8 中的编码问题
- 有没有一种方法可以在IE8中解决我的Rails javascript应用程序.js的问题
- IE8显示可滚动表的隐藏问题
- 谷歌地图集群IE8问题
- ie7和ie8中的JQuery/Javascript问题
- 缺少 iframe ie8.相对定位不能解决问题
- IE8 追加到 XML 问题:类型不匹配
- 我的JavaScript代码有什么问题?它在IE8中不起作用
- 显示 CSS 样式表时出现 IE8 问题
- 联系表单和IE8问题 - 似乎无法阻止表单提交
- IE8 问题 - jQuery 调整页面大小时导航 html
- addEventListener 给出 IE8 问题.是否可以将我的JavaScript转换为jQuery
- 引导程序 3 和 IE8 问题
- 不理解这个setTimeout是如何/为什么修复我的IE8问题的
- 单击(IE8问题)刷新选择框
- 触发变更事件的IE8问题
- jQuery自动完成- IE8问题-这个选项卡已经恢复
- 动态添加Google + +1按钮和IE8问题