Javascript 仅在页面重新加载后访问对象 属性
Javascript only access object property after page reload
我的代码有一个很奇怪的问题。我正在使用 geoxml3 来解析一个 kml 文件,它可以解析所有多段线,但是当它到达标记时,控制台显示它是 undefined
。奇怪的是,每次我重新加载页面时,它都能正常工作,但每次我在新选项卡中打开时,它又会中断。更奇怪的是,当我在条件之前放置一个 console.log
来检查它是折线还是标记时,浏览器的控制台显示那里有一个 marker
属性.
这是 geoxml3 需要的我的 useTheData 函数:
function useTheData(doc){
console.log("Starts Parse");
console.log(doc[0].placemarks.length);
for (var i = 0; i < doc[0].placemarks.length; i++){
console.log("i: "+i+", placemark:");
console.log(doc[0].placemarks[i]); //here the .marker property exists in the console
console.log(".marker:");
console.log(doc[0].placemarks[i].marker); //here it says it's undefined!
if(doc[0].placemarks[i].polyline){ //check if it's a polyline
google.maps.event.addListener(doc[0].placemarks[i].polyline, 'click', select_option);
}
else{
console.log("### i = "+i);
console.log("1");
console.log(doc[0].placemarks[i].marker); //here, the exact same object, doesn't have the marker property!
console.log("2");
google.maps.event.addListener(doc[0].placemarks[i].marker, 'click', select_option); //Because of that, the first time the page loads, it get's stuck in the function cuz it can't access the .marker
console.log("3");
doc[0].placemarks[i].marker.setIcon({
url: "img/bola.png",
scaledSize: new google.maps.Size(10, 10),
anchor: new google.maps.Point(5, 5)
});
console.log("4");
}
}
console.log("End Parse");
google.maps.event.addListener(map, 'click', select_option);
}
这是由于 geoxml3 的 polys 和 kmz 分支之间的差异之一。
geoxml3 的 kmz 分支有一个用于图标的 img onload 事件处理程序,这可能导致它们在解析操作完成后的某个时间之前不可用。它使图标大小调整效果更好,但可能会导致您在 afterParse
函数中看到的问题。
我的代码有一个很奇怪的问题。我正在使用 geoxml3 来解析一个 kml 文件,它可以解析所有多段线,但是当它到达标记时,控制台显示它是 undefined
。奇怪的是,每次我重新加载页面时,它都能正常工作,但每次我在新选项卡中打开时,它又会中断。更奇怪的是,当我在条件之前放置一个 console.log
来检查它是折线还是标记时,浏览器的控制台显示那里有一个 marker
属性.
这是 geoxml3 需要的我的 useTheData 函数:
function useTheData(doc){
console.log("Starts Parse");
console.log(doc[0].placemarks.length);
for (var i = 0; i < doc[0].placemarks.length; i++){
console.log("i: "+i+", placemark:");
console.log(doc[0].placemarks[i]); //here the .marker property exists in the console
console.log(".marker:");
console.log(doc[0].placemarks[i].marker); //here it says it's undefined!
if(doc[0].placemarks[i].polyline){ //check if it's a polyline
google.maps.event.addListener(doc[0].placemarks[i].polyline, 'click', select_option);
}
else{
console.log("### i = "+i);
console.log("1");
console.log(doc[0].placemarks[i].marker); //here, the exact same object, doesn't have the marker property!
console.log("2");
google.maps.event.addListener(doc[0].placemarks[i].marker, 'click', select_option); //Because of that, the first time the page loads, it get's stuck in the function cuz it can't access the .marker
console.log("3");
doc[0].placemarks[i].marker.setIcon({
url: "img/bola.png",
scaledSize: new google.maps.Size(10, 10),
anchor: new google.maps.Point(5, 5)
});
console.log("4");
}
}
console.log("End Parse");
google.maps.event.addListener(map, 'click', select_option);
}
这是由于 geoxml3 的 polys 和 kmz 分支之间的差异之一。
geoxml3 的 kmz 分支有一个用于图标的 img onload 事件处理程序,这可能导致它们在解析操作完成后的某个时间之前不可用。它使图标大小调整效果更好,但可能会导致您在 afterParse
函数中看到的问题。