2012-06-09 11 views
52

Ich habe ein Google Maps Autocomplete-Eingabefeld in einem Twitter Bootstrap-Modaldialog und das Autocomplete-Ergebnis wird nicht angezeigt. Wenn ich jedoch die Abwärtspfeiltaste drücke, wird das nächste Autocomplete-Ergebnis ausgewählt. Daher scheint der Autocomplete-Code korrekt zu funktionieren, nur dass das Ergebnis nicht korrekt angezeigt wird. Vielleicht ist es hinter dem modalen Dialog verborgen?Google Maps Autocomplete-Ergebnis im Bootstrap Modal Dialog

Hier die Screenshots:

<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> 
:

Typing something in the autocomplete field gives nothing etwas in der Autocomplete-Feld nichts Typing

Pressing the arrow down key gives the first result den Pfeil Drücken nach unten Taste öffnet das erste Ergebnis

und der Code gibt

<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> 

Ich habe mein Bestes versucht, dies auf eigene Faust zu lösen, aber da ich die HTML-& CSS für das Ergebnis der automatischen Vervollständigung nicht kennen (inspizieren Element nichts gibt), ich bin jetzt in einem verloren. Irgendwelche hilft?

Vielen Dank!

+2

Ich machte ein paar Fortschritte, aber schlug eine Wand. Ich erkläre, was ich entdeckt habe, um anderen zu helfen, Ihre Frage hoffentlich zu lösen. Ich habe die Textbox neu angeordnet und es sieht so aus, als ob die Autovervollständigung nicht nur hinter dem Modal, sondern auch hinter dem Graubereich liegt (siehe diese Demo) http://jsfiddle.net/Y4WgX/embedded/result/ Ändern des z -Index war unwirksam. Ich habe auch gelernt, dass die Vorschläge in einem div mit Klasse namens pac-container sind, also änderte ich seine Farbe auf grün um zu demonstrieren. –

Antwort

88

Das Problem ist, mit dem z-index des .modal

verwenden CSS Markup:

.pac-container { 
    background-color: #FFF; 
    z-index: 20; 
    position: fixed; 
    display: inline-block; 
    float: left; 
} 
.modal{ 
    z-index: 20; 
} 
.modal-backdrop{ 
    z-index: 10;   
}​ 

Sie können auch die letzte Demo überprüfen here

ps: dank @ Lilina für diese Demo auf jsfiddle.com

+0

Warum ist das alles notwendig? Ich weiß es, aber warum? Auch das bringt das Modal zu weit für mich und die bootstrap static nav-bar ist jetzt drüber. Alternativen? –

+0

@MarcM. Welche Bootstrap-Version verwendest du? Ich denke, es wäre besser, wenn Sie eine neue Frage mit allen Einzelheiten Ihres Problems aufschlagen. – Luis

+7

Ich stellte fest, dass dies mein Modal hinter meine Navigationsleiste stellte, es sah nicht richtig aus. Versuchen Sie den Z-Index des .pac-Containers auf 1050 zu ändern –

4

Im Allgemeinen können Sie den .pac-container z-index auf etwas über 1050 hochsetzen, und Sie werden die anderen CSS-Überschreibungen nicht benötigen.

Ich entdeckte, dass dieses Problem auch für jQuery UI-Dialoge besteht. Also, falls es jedes Wesen hilfreich endet anders, hier ist eine schnelle Referenz für, wo die Bootstrap/jQuery UI modals lebt in der z-Ebene:

jQuery UI Dialog - z-index: 1001 
Bootstrap Modal - z-index: 1050 
14

Bootstrap der .modalz-index ist standardmäßig 1050.

jQuery UI .ui-autocompletez-index ist standardmäßig 3.

dies also auf dem CSS setzen:

/* 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; 
} 

W Orks Wunder! :)

+0

Wenn dies nicht für Sie funktioniert, könnte es sein, dass .ui-Autocomplete nicht existiert. Kombinieren Sie es stattdessen mit der akzeptierten Antwort und machen Sie einen .pac-Container {z-index: 1051; } Das ist viel sauberer als die erwartete Antwort und betrifft viel weniger von Ihrem anderen Code – Pompey

3

In meinem Szenario wird der Z-Index-Wert des .pac-Containers init sein und auf 1000 überschreiben, sogar ich setze in CSS. (möglicherweise durch Google API?

.pac-container { 
    z-index: 1040 !important; 
} 
+0

Dies hilft, obwohl in neueren Bootstrap, ist das Ereignis 'showed.bs.modal'. – Arunas

+0

Ja, Dieser Trick ist wirklich genial Bro ... Danke –

10

mit Bootstrap 3 Arbeitete auf Ihre style.css Seite stellen Sie den z-index für .modal bis 20.

beispiels

.modal { 
    z-index: 20 !important; 
} 
+4

Ich musste es zu 1050 ändern dann funktionierte es –

+0

Danke für die Antwort und ich änderte es auch zu 1050 – Harsha

37
.pac-container { 
    z-index: 1051 !important; 
} 

hat es für mich

https://github.com/twbs/bootstrap/issues/4160

+7

Die einfachste Antwort .... Abstimmung! – sports

+0

eine große Lösung in einfachen Formulierungen .... grüßen Sie ... –

+0

Works! Möglicherweise müssen Sie den Z-Index-Wert abhängig von Ihrer CSS erhöhen. –

0

Wenn Sie Visual Studio verwenden,:)

meine schmutzige fix

$('#myModal').on('shown', function() { 
    $(".pac-container").css("z-index", $("#myModal").css("z-index")); 
} 
0

Das ist für mich gearbeitet.

    var pacContainerInitialized = false; 
        $('#inputField').keypress(function() { 
          if (!pacContainerInitialized) { 
            $('.pac-container').css('z-index','9999'); 
            pacContainerInitialized = true; 
          } 
        });