2012-05-27 19 views
6

Câu hỏi này liên quan đến câu trả lời cho câu hỏi này: Google maps Places API V3 autocomplete - select first option on enter. Về cơ bản, nó là làm cho trường sử dụng đề xuất đầu tiên từ danh sách tự động hoàn tất khi người dùng nhấn enter. Câu trả lời cho câu hỏi đó có jsfiddle - http://jsfiddle.net/dodger/pbbhH/ - hoạt động ngoại trừ khi trường văn bản mất tiêu điểm, giá trị trường trả về giá trị được nhập một phần.Bản đồ Google Địa điểm API V3 tự động hoàn tất - chọn tùy chọn đầu tiên khi nhập (và giữ nguyên cách này)

Ví dụ: người dùng nhấp vào trường nhập và nhập 'bò', hộp tự động hoàn tất bật lên với một số đề xuất và người dùng nhấn enter. Bản đồ sau đó được thay đổi để hiển thị vị trí của mục đầu tiên từ hộp tự động hoàn thành (có điểm đánh dấu) và giá trị của trường nhập được thay đổi thành mục đầu tiên từ hộp tự động điền. Sau đó, người dùng nhấp vào một nơi nào đó bên ngoài trường và giá trị của trường nhập sẽ trả về 'ox'.

Tôi muốn giá trị của trường nhập để giữ nguyên đề xuất tự động hoàn thành đầu tiên.

Trả lời

10

Hãy thử điều này: http://jsfiddle.net/pbbhH/60/

Về cơ bản trừu tượng logic lựa chọn vào một chức năng mới selectFirstResult(). Sau đó, gọi chức năng này trên cả hai nhấn enter và mất tập trung vào văn bản.

function selectFirstResult() { 
    infowindow.close(); 
    var firstResult = $(".pac-container .pac-item:first").text(); 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({"address":firstResult }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var lat = results[0].geometry.location.lat(), 
       lng = results[0].geometry.location.lng(), 
       placeName = results[0].address_components[0].long_name, 
       latlng = new google.maps.LatLng(lat, lng); 

      moveMarker(placeName, latlng); 
      $("input").val(firstResult); 
     } 
    }); 
} 

EDIT: thực hiện thay đổi nhỏ mỗi @ bình luận của Ben bên dưới.

+0

Oh! Hầu như đã có nó. Vì vậy, bây giờ vấn đề là nó chọn đề xuất đầu tiên trong danh sách tự động hoàn thành nếu họ nhập một vài chữ cái và sau đó nhấp vào bên ngoài trường nhập. Tôi muốn nó hoặc là họ phải: chọn từ danh sách tự động hoàn thành bằng cách sử dụng con chuột của họ, hoặc nhấn enter để chọn tùy chọn đầu tiên. – Ben

+0

Rất vui khi biết rằng @Mubix đã giúp bạn tiến lên phía trước. Hãy trả lời rất tốt Mubix đã cho bạn, hãy thử một số điều để thực hiện những thay đổi bạn cần, và nếu điều đó không hiệu quả, hãy tiếp tục cố gắng làm việc đó cho chính bạn. Trong khi bạn đang làm công việc đó, anh ta có thể quyết định trở lại và thêm vào câu trả lời của mình, nhưng anh ta có thể không. Nếu bạn gặp nhiều vấn đề hơn và bị kẹt trong khi đang làm việc, hãy quay lại và nhờ giúp đỡ. Nhưng không công bằng khi chỉ cần ném thêm câu hỏi vào Mubix và mong anh ta trả lời chúng trước khi bạn chấp nhận câu trả lời của mình. –

+0

Tôi đang bối rối. Trong khi câu trả lời của Mubix về mặt kỹ thuật đã thay đổi giá trị của trường như mong muốn, nó cũng giới thiệu hành vi bổ sung mà tôi không thể tưởng tượng được bất cứ ai muốn. Nó sẽ không được tốt nhất cho kho lưu trữ thông tin của Stackoverflow nếu tôi chờ đợi cho đến khi chúng tôi đã đưa ra một giải pháp hoạt động hoàn toàn trước khi đánh dấu câu hỏi là đã trả lời? – Ben

1

Điều này đúng nhưng nếu bạn nhấn enter và bạn đã chọn mục, mục này sẽ chọn mục đầu tiên. Vì vậy, hãy sử dụng mã này:

function selectFirstResult() { 
infowindow.close(); 
if ($('.pac-selected').lenght < 0){ // this line 

var firstResult = $(".pac-container .pac-item:first").text(); 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({"address":firstResult }, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var lat = results[0].geometry.location.lat(), 
      lng = results[0].geometry.location.lng(), 
      placeName = results[0].address_components[0].long_name, 
      latlng = new google.maps.LatLng(lat, lng); 

     moveMarker(placeName, latlng); 
     $("input").val(firstResult); 
    } 
}); 
} 
} 
+0

nó 'if ($ ('. pac-selected'). chiều dài <= 0) {'? – Kroenig

Các vấn đề liên quan