アップデート
読みやすくするために、ここにエラーを追加しました。以下は、その更新で発生するエラーです。PSそれはInfoboxではなくInfoBoxであるべきです、私がそれを入力したときにどこかでそのエラーを作ったと思います:)。それで、私は今どこで間違っていますか?このエラーメッセージが何を言っているのかさえわかりません:
Uncaught TypeError: Cannot read property 'style' of null
InfoBox.setBoxStyle_
InfoBox.setOptions
(anonymous function) PAGE.php:101
N.trigger main.js:23
xK.(anonymous function).e
(anonymous function)
N.trigger main.js:23
F.ie
F.sm
(anonymous function) main.js:11
N.trigger main.js:23
F.Jk
(anonymous function)
古い投稿
カスタム DB で構築された XML ファイルを使用してカスタム マーカーが生成されるカスタム Google マップ V3 があります。以下にコードを投稿しました。これはすべて機能します。唯一のことは、Infobox プラグインを組み込んだことです。これにより、マーカー スタイルのスタイリングをより詳細に制御できます。ただし、Google InfoWindow とは異なり、別のマーカーがクリックされたときに自動的に閉じません。
これはロード関数で、マップを設定し、XML ファイルでマーカーを作成します。
function load() {
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(54.500, 355.000),
zoom: 5,
mapTypeId: 'roadmap'
});
downloadUrl("genxml.php?id=<?php echo $VarToUse ?>",function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var number = markers[i].getAttribute("number");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
var myOptions = {
content: "<b class=\"infoBox_links\"><a href=\"search.php?BoxID=" + number + "\">" + name + "</a></b> <br/>" + address
,disableAutoPan: false
,maxWidth: 0
,pixelOffset: new google.maps.Size(-90, -125)
,zIndex: null
,boxStyle: {
background: "#FFFFFF",
border: "1px solid grey",
width: "170px",
height: "70px",
padding: "8px",
fontSize: "12px",
overflow: "hidden"
}
,closeBoxMargin: "-5px"
,closeBoxURL: "imgs/x_google.png"
,isHidden: false
,pane: "floatPane"
,enableEventPropagation: false
};
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon
});
bindInfoWindow(marker, map, myOptions); //function call to set the markers!
}
});
} //End of function load()
ご覧のとおり、ロード内で呼び出される関数があります。これが現在のコードで、正常に動作します。
function bindInfoWindow(marker, map, myOptions) {
google.maps.event.addListener(marker, 'click', function() {
var ib = new InfoBox(myOptions);
ib.open(map, marker);
});
} //End of bindInfoWindow function!!
これは機能し、必要なスタイルのカスタム情報ボックスが生成されますが、新しいマーカーをクリックしても現在の「開いている」情報ボックスは閉じません。そして、他の人々からの多くの異なる試みやアイデアから、私は現在次のものに取り組んでいます:
function bindInfoWindow(marker, map, myOptions) {
var ibs = [];
var closeInfoBox = function() {
for (var i in ibs) {
ibs[i].close();
}
}
var ibIndex = ibs.push(new Infobox()) - 1,
ib = ibs[ibIndex];
google.maps.event.addListener(marker, 'click', function() {
closeInfoBox();
ib.setOptions(myOptions);
//var ib = new InfoBox(myOptions);
ib.open(map, marker);
});
}
このコードは、地図上に複数のマーカーが表示されているときに一度にインフォボックスのみを開くことから来ています
ただし、これはエラーになるだけです。このコードを正しくコピーしていないか、このコードが機能しないほどマップの設定が異なっているかのいずれかです (そうではないと思います)。それは私が正しくしていないことだと思います。現時点では、この行は機能したくないため、
var ibIndex = ibs.push(new Infobox()) - 1,
コンソールログに戻ってきます
Uncaught ReferenceError: Infobox is not defined PAGE.php:101
bindInfoWindow PAGE.php:101
(anonymous function) PAGE.php:84
request.onreadystatechange
すべてのアイデアを歓迎します。
どうもありがとう
グレン。