【发布时间】:2014-11-18 06:27:57
【问题描述】:
我在页面加载时调用初始化函数。哪个正确设置了所有标记。然后我有一个搜索框和一个提交按钮,它清除所有标记,然后获取一个新的 JSON 对象,该对象由要创建的新标记组成。一旦我输入搜索查询并调用 getWorldTweets 函数,我就会收到此错误:
无法读取未定义的 setMap 属性
它指向 addMarker 和 deleteMarker 函数。
var map;
var marker;
var allmarkers = [];
var iterator = 0;
var riterator = 0;
var geocoder = new google.maps.Geocoder();
var search = {
q: ""
};
function initialize() {
var mapOptions = {
//center: new google.maps.LatLng(-34.397, 150.644),
center: new google.maps.LatLng(0,0),
zoom: 2,
//draggable: false,
minZoom: 1
};
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
getWorldTweets();
}
function getWorldTweets(){
deleteMarkers();
iterator = 0;
riterator = 0;
$.ajax({
type: 'POST',
url: 'php/worldTweetsDatabaseHandler.php',
data: search,
dataType : 'json',
success: function( res ) {
console.log(res);
for(var x in res){
var myLatlng = new google.maps.LatLng(res[x]['LATITUDE'],res[x]['LONGITUDE']);
marker = new google.maps.Marker({
animation: google.maps.Animation.DROP,
icon: "img/tweetmarker2.png",
position: myLatlng,
title: res[x]['TWEET_TEXT']
});
allmarkers.push(marker);
}
setMarkersMap();
}
});
}
function addMarker(){
allmarkers[iterator].setMap(map);
iterator++;
}
function deleteMarker(){
allmarkers[riterator].setMap(null);
riterator++;
}
function setMarkersMap(){
for(var i = 0;i<allmarkers.length;i++){
setTimeout(function(){
addMarker();
},i*100);
setTimeout(function(){
deleteMarker();
},i*500);
}
}
function setAllMap(map){
for(var i = 0;i<allmarkers.length;i++){
//console.log("hello");
allmarkers[i].setMap(map);
}
}
function clearMarkers() {
setAllMap(null);
}
function deleteMarkers() {
console.log("in delete");
clearMarkers();
allmarkers = [];
}
$("#submit").on("click", function () {
search.q=document.getElementById('searchquery').value;
//deleteMarkers();
getWorldTweets();
});
$("#searchquery").keyup(function(event){
if(event.keyCode == 13){
$("#submit").click();
}
});
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
google.maps.event.addDomListener(window, 'load', initialize);
谁能告诉我出了什么问题。
谢谢。
【问题讨论】:
-
setMarkersMap- 您正在循环标记标记,添加它们,然后删除它们?你能解释一下这里发生了什么 -
由于地图上有很多标记,我以更快的速度添加标记,然后以较慢的速度删除最旧的标记。
-
你会遇到问题,我想从同一个数组中删除和添加
-
什么样的问题?你能举个例子吗?到目前为止,一切正常。
-
您每 100 毫秒调用一次 addMarker,每 500 毫秒调用一次 deleteMarker。你要处理多少个标记?例如,如果有 5 个,您将同时调用 addMarker 和 deleteMarker。全局变量
allmarkers会搞砸
标签: javascript google-maps google-maps-api-3