मैं इस समस्या को हल मेरे सिर पाने के लिए प्रतीत नहीं कर सकते हैं:ओपन infoWindow (वी 3)
मैं के साथ (का एक बहुत) एक नक्शे के मिल गया है मार्कर (कंपनियों) कि आ जेनरेट की गई एक्सएमएल फाइल से। मानचित्र के नीचे, मैं मानचित्र पर प्रदर्शित सभी कंपनियों की एक (गैर-जावास्क्रिप्ट-जेनरेटेड) सूची दिखाना चाहता हूं। जब मैं सूची में किसी कंपनी पर क्लिक करता हूं, तो नक्शा उस विशिष्ट मार्कर पर पैन करेगा और एक जानकारी विन्डो खोल देगा। बात यह है कि मैं नक्शा और सूची दो अलग-अलग चीजें बनना चाहता हूं ...
इस समस्या से निपटने का सही तरीका क्या होगा? धन्यवाद! महत्वपूर्ण है कि सभी markerinfo गतिशील है है ...
function initialize_member_map(lang) {
var map = new google.maps.Map(document.getElementById("large-map-canvas"), {
center: new google.maps.LatLng(50.85034, 4.35171),
zoom: 13,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
downloadUrl("/ajax/member-xml-output.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
var company = markers[i].getAttribute("company");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var uid = markers[i].getAttribute("uid"); // Primary key of company table in MySQL
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + company + "</b> <br/>" + address;
bounds.extend(point);
var marker = new google.maps.Marker({
map: map,
position: point,
uid: uid // Some experiments, wanted to use this to target specific markers...
});
bindInfoWindow(marker, map, infoWindow, html);
}
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
मीकल द्वारा सुझाव के बाद, मैं निम्नलिखित की कोशिश की है, लेकिन दो समस्याओं का सामना कर रहा हूँ: मेरे कंसोल मुझे markers[index].getPosition is not a function
बताता है और मेरी सूची में पहले आइटम को दर्शाता है undefined
हो। क्या आप कृपया मदद कर सकते हैं?
//JavaScript Document
var map;
var markers = new Array();
var company_list;
function initialize_member_map(lang) {
map = new google.maps.Map(document.getElementById("large-map-canvas"), {
center: new google.maps.LatLng(50.85034, 4.35171),
zoom: 13,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
// Change this depending on the name of your PHP file
downloadUrl("/ajax/member-xml-output.php?country=BE", function(data) {
var xml = data.responseXML;
markers = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
var company = markers[i].getAttribute("company");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var uid = markers[i].getAttribute("uid");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + company + "</b> <br/>" + address;
bounds.extend(point);
var marker = new google.maps.Marker({
map: map,
position: point,
uid: uid
});
bindInfoWindow(marker, map, infoWindow, html);
company_list += "<div onclick=scrollToMarker(" + i + ")>"+company+"</div>";
}
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
//display company data in html
document.getElementById("company_list").innerHTML = company_list;
});
}
function scrollToMarker(index) {
map.panTo(markers[index].getPosition());
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing(){
}
धन्यवाद, मीकल। मैंने आपके सुझावों का प्रयास किया है, लेकिन ऊपर दिए गए प्रश्न में वर्णित दो चीजों पर फंस गया हूं। क्या आप मदद कर सकतें है? धन्यवाद! – maartenmachiels
आप सरणी पर मार्कर गुणों तक पहुंचने का प्रयास कर रहे हैं जिसमें आप अपने एक्सएमएल (टेक्स्ट डेटा) को मार्कर ऑब्जेक्ट्स नहीं स्टोर करते हैं। मेरी लिपि में खेद है मैंने अपने ऑब्जेक्ट सरणी मार्करों को बुलाया ताकि इसलिए दहन हो। आपको केवल Google मानचित्र मार्कर ऑब्जेक्ट को पकड़ने के लिए एक और सरणी को परिभाषित करना है - इसे gMarkers कहते हैं और प्रत्येक मार्कर को इसे – Michal
बनाते समय धक्का दें, ऐसा करने के बाद आपको स्क्रॉलटॉकर() – Michal