Twitter Bootstrapモーダルダイアログ内にGoogleマップのオートコンプリート入力フィールドがあり、オートコンプリートの結果は表示されません。ただし、下矢印キーを押すと、次のオートコンプリートの結果が選択されます。オートコンプリートコードは正しく機能しているようですが、結果が正しく表示されていないだけです。おそらくモーダルダイアログの後ろに隠れているのでしょうか。
スクリーンショットは次のとおりです。
オートコンプリートフィールドに何かを入力しても何も得られない
下矢印キーを押すと、最初の結果が得られます
そしてコード:
<div class="modal hide fade" id="map_modal">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="control-group">
<label class="control-label" for="keyword">Cari alamat :</label>
<div class="controls">
<input type="text" class="span6" name="keyword" id="keyword">
</div>
</div>
<div id="map_canvas" style="width:530px; height:300px"></div>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
<a href="#" class="btn btn-primary">Save changes</a>
</div>
<script type="text/javascript">
$("#map_modal").modal({
show: false
}).on("shown", function()
{
var map_options = {
center: new google.maps.LatLng(-6.21, 106.84),
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), map_options);
var defaultBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(-6, 106.6),
new google.maps.LatLng(-6.3, 107)
);
var input = document.getElementById("keyword");
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo("bounds", map);
var marker = new google.maps.Marker({map: map});
google.maps.event.addListener(autocomplete, "place_changed", function()
{
var place = autocomplete.getPlace();
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(15);
}
marker.setPosition(place.geometry.location);
});
google.maps.event.addListener(map, "click", function(event)
{
marker.setPosition(event.latLng);
});
});
</script>
私は自分でこれを解決するために最善を尽くしましたが、オートコンプリート結果のHTML&CSSがわからないため(検査要素は何も与えません)、今は迷っています。何か助けますか?
前にありがとう!
問題はz-index
の.modal
これを使用してください[〜#〜] css [〜#〜]マークアップ:
.pac-container {
background-color: #FFF;
z-index: 20;
position: fixed;
display: inline-block;
float: left;
}
.modal{
z-index: 20;
}
.modal-backdrop{
z-index: 10;
}
また、最終デモを確認できます here
ps:jsfiddle.comのデモの@lilinaに感謝
ブートストラップの.modal
z-index
はデフォルトで1050です。
jQuery UIの.ui-autocomplete
z-index
はデフォルトで3です。
CSSにこれを置きます:
/* Fix Bootstrap .modal compatibility with jQuery UI Autocomplete,
see http://stackoverflow.com/questions/10957781/google-maps-autocomplete-result-in-bootstrap-modal-dialog */
.ui-autocomplete {
z-index: 1051 !important;
}
驚異の作品! :)
Bootstrap 3:
.pac-container {
z-index: 1040 !important;
}
私のシナリオでは、.pac-containerのz-index値はinitになり、CSSで設定した場合でも1000に上書きされます。 (おそらくGoogle APIによる?)
私の汚い修正
$('#myModal').on('shown', function() {
$(".pac-container").css("z-index", $("#myModal").css("z-index"));
}
一般的に、.pac-container z-indexを1050を超える値に上げることができ、他のCSSオーバーライドは必要ありません。
この問題はjQuery UIダイアログにも存在することを発見しました。したがって、他の人にとって役立つ場合は、Bootstrap/jQuery UIモーダルがzプレーンのどこにあるかについてのクイックリファレンスを以下に示します。
jQuery UI Dialog - z-index: 1001
Bootstrap Modal - z-index: 1050
これは私のために働いた。
var pacContainerInitialized = false;
$('#inputField').keypress(function() {
if (!pacContainerInitialized) {
$('.pac-container').css('z-index','9999');
pacContainerInitialized = true;
}
});
Visual Studioを使用している場合、style.css
ページ設定z-index
ために .modal
〜20。
例えば
.modal {
z-index: 20 !important;
}
Google Places APIドロップダウンzインデックスでエラーを掘り下げるために2,3時間を費やしました。最後にこれを見つけました。このコードをJSスクリプトの先頭に貼り付けて、入力ID名を更新するだけです。
var pacContainerInitialized = false;
$("#inputField").keypress(function() {
if (!pacContainerInitialized) {
$(".pac-container").css("z-index", "9999");
pacContainerInitialized = true;
}
});
完全な参照リンク。 https://groups.google.com/forum/#!topic/google-maps-js-api-v3/GZX0ynQNn1M Gautamに感謝します。