2012-06-09 13 views
52

Mam pole wejściowe Autokomplet Google Maps w oknie dialogowym modemu Bootstrap, a wynik autouzupełniania nie jest wyświetlany. Jeśli jednak naciśnie klawisz strzałki w dół, wybierze następny wynik autouzupełniania, więc wydaje się, że kod autouzupełniania działa poprawnie, tyle że wynik nie jest wyświetlany poprawnie. Może jest ukryty za modalnym dialogiem?Google Maps Autouzupełnianie Wynik w oknie dialogowym Modem Bootstrap

Oto screeny:

Typing something in the autocomplete field gives nothing napisanie czegoś w polu autouzupełniania nic nie daje

Pressing the arrow down key gives the first result naciskając strzałkę w dół klucz daje pierwszy wynik

a kod:

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

Próbowałem mojej mocy, aby rozwiązać ten problem na własną rękę, ale ponieważ ja nie znam html & CSS dla wyniku autouzupełniania (skontrolować elementem nic nie daje), jestem w utracone teraz. Dowolne pomaga?

Dzięki wcześniej!

+2

Poczyniłem pewne postępy, ale uderzyłem w ścianę. Wyjaśnię, co odkryłem, aby spróbować pomóc innym, mam nadzieję, rozwiązać Twoje pytanie. Przeorganizowałem pole tekstowe i wygląda na to, że autouzupełnianie jest nie tylko za modalem, ale także za obszarem wyszarzającym (sprawdź to demo) http://jsfiddle.net/Y4WgX/embedded/result/ Zmienianie z -index był nieskuteczny. Nauczyłem się również, że sugestie są w div z klasą o nazwie pac-container, więc zmieniłem jej kolor na zielony, aby zademonstrować. –

Odpowiedz

88

Problem jest z z-index z .modal

użytkowania tego 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;   
}​ 

Ponadto można sprawdzić ostateczną demo here

PS: dzięki @ lilina do tego demo na jsfiddle.com

+0

Dlaczego to wszystko jest konieczne? Wiem, że tak, ale dlaczego? Również to nakłada modal do mnie daleko i statyczny navarbar bootstrap jest już nad nim. Alternatywy? –

+0

@MarcM. Z jakiej wersji bootstrap korzystasz? Myślę, że byłoby lepiej, gdybyś otworzył nowe pytanie z pełnymi szczegółami swojego problemu. – Luis

+7

Znalazłem, że to postawiło mój modal za moim pasku nawigacji, to nie wyglądało dobrze. Spróbuj zmienić indeks z .pac-container na 1050 –

4

Ogólnie rzecz biorąc, można po prostu podnieść indeks z .pac-container do wartości powyżej 1050 i nie będziesz potrzebował innych przesłonięć CSS.

Odkryłem, że ten problem istnieje również w oknach dialogowych interfejsu użytkownika jQuery. Tak więc w przypadku, gdy kończy się pomocne dla nikogo innego, oto szybkie odniesienia dla gdzie czasowniki modalne Bootstrap/jQuery UI żyć w z-samolotu:

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

Bootstrap na .modalz-index jest domyślnie 1050.

jQuery UI .ui-autocompletez-index jest domyślnie 3.

więc umieścić to na 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; 
} 

W. Orki zastanawiają się! :)

+0

Jeśli to nie działa, może to być spowodowane tym, że autouzupełnianie .ui nie istnieje. Zamiast tego połącz go z zaakceptowaną odpowiedzią i wykonaj plik .pac-container {indeks z: 1051; }, który jest dużo czystszy niż oczekiwana odpowiedź i wpływa znacznie mniej na twój inny kod – Pompey

3

W moim scenariuszu wartość indeksu z .pac-kontenera zostanie zainicjowana i nadpisana do 1000, nawet jeśli ustawię w CSS. (być może przez Google API?)

mój brudny fix

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

To pomaga, chociaż w nowszym Bootstrapie zdarzenie to "pokazany.bs.modal". – Arunas

+0

Tak, ta sztuczka jest naprawdę niesamowita ... Dzięki –

10

Pracował z Bootstrap 3:

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

Potrzebowałem zmienić ją na 1050, a potem zadziałała –

+0

Dzięki za odpowiedź, a także zmieniłem ją na 1050 – Harsha

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

zrobił to dla mnie

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

+7

Najprostsza odpowiedź .... zagłosuj! – sports

+0

duże rozwiązanie w prostych słowach .... pozdrawiam ... –

+0

Działa! Może być konieczne zwiększenie wartości indeksu Z w zależności od Twojego css. –

0

Jeśli używasz programu Visual Studio, na strona style.css ustawić z-index dla .modal do 20.

np

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

ten pracował dla mnie.

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