2013-02-01 24 views
13

Tôi đang sử dụng API tự động hoàn thành API Google v3 JavaScript. Nó hoạt động tốt nhưng tôi đã tự hỏi nếu có một cách để buộc các lựa chọn từ autocomplete, đó là đầu vào mà sẽ không chấp nhận bất kỳ văn bản mẫu miễn phí. Tôi nhìn vào các tài liệu và không thấy một lựa chọn như vậy, nhưng tôi nghĩ rằng tôi sẽ yêu cầu được an toàn. Tôi chắc chắn rằng tôi có thể làm việc ra một cách để làm điều đó với một số JavaScript nhưng muốn sử dụng một phương pháp đã được xây dựng nếu nó có sẵn. Cảm ơn!Lựa chọn lực lượng tự động hoàn thành của Google Địa điểm

Trả lời

8

API Google Địa điểm hiện không hỗ trợ tính năng này. Nếu bạn cho rằng đây là một tính năng hữu ích, vui lòng gửi Places API - Feature Request.

+0

Tôi đang sử dụng giải pháp thay thế ... thay vào đó, tôi sử dụng API dự đoán tự động hoàn thành để chọn theo mặc định kết quả đầu tiên. – nicolasbui

+0

http://code.google.com/p/gmaps-api-issues/issues/detail?id=8456 Bỏ phiếu, nếu bạn cũng bị ảnh hưởng. –

+0

Đừng làm điều này. Đó là một ý tưởng tồi tệ vì Google thường sai. Ví dụ: đối với những con đường mới, bạn sẽ bị trễ một năm cho đến khi các địa chỉ chính xác được nhận dạng. Xem câu trả lời dưới đây. – eraoul

0

Tôi đã gặp vấn đề tương tự, dưới đây là một chức năng mà tôi đã đưa ra như một công việc xung quanh. Điều này có thể được sử dụng kết hợp với một sự kiện như onchange hoặc onkeyup. Hy vọng nó giúp!

//Arguments:

address - string containing the place that you want to validate address_success_div - div object specifically used for displaying validation

function is_location_valid(address, address_success_div) 
{ 
    var geocoder = new google.maps.Geocoder(); 

    geocoder.geocode({"address": address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      address_success_div.innerHTML = "SUCCESS"; 
     } 
     else 
     { 
      address_success_div.innerHTML = "FAILURE"; 
     } 
    }); 
} 
9

Trên thực tế, những gì chúng tôi làm là như sau:
- Mỗi khi một vị trí được chọn từ các Auto danh sách đầy đủ, chúng tôi cư một số lĩnh vực tiềm ẩn với một số các trường đến từ phản hồi JSON (tên thành phố, tên quốc gia, kinh độ và vĩ độ)
- Khi biểu mẫu được gửi, chúng tôi kiểm tra xem các trường này có val hay không ues, nếu không, điều đó có nghĩa là người dùng thay vì chọn vị trí từ danh sách, anh ấy chỉ nhập giá trị.

Nó không giải quyết được vấn đề theo cách JS, nhưng vẫn còn, nó thực hiện thủ thuật tốt!

+2

Cần lưu ý rằng bạn cũng nên xóa các giá trị khỏi các đầu vào bị ẩn này nếu người dùng xóa vị trí đã chọn và sau đó nhập thủ công một vị trí. – digout

+3

Nó sẽ không hoạt động. Giả sử đầu tiên tôi chọn vị trí thích hợp từ tự động điền, do đó dựa trên giá trị trường ẩn của bạn sẽ điền và sau đó nếu tôi xóa một số văn bản khỏi hộp tự động hoàn tất và sau đó gửi, trong trường hợp đó địa chỉ sai sẽ chèn vào DB của bạn dưới dạng giá trị trường ẩn đã có một số giá trị. – Milan

3
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places" 
    type="text/javascript"></script> 
<script> 
    var IsplaceChange = false; 
    $(document).ready(function() {    
     var input = document.getElementById('txtlocation'); 
     var autocomplete = new google.maps.places.Autocomplete(input, { types: ['(cities)'] }); 

     google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 

      IsplaceChange = true; 
     }); 

     $("#txtlocation").keydown(function() { 
      IsplaceChange = false; 
     }); 

     $("#btnsubmit").click(function() { 

      if (IsplaceChange == false) { 
       $("#txtlocation").val(''); 
       alert("please Enter valid location"); 
      } 
      else { 
       alert($("#txtlocation").val()); 
      } 

     }); 
    }); 
</script> 




+1

Hãy thử thêm mô tả hoặc giải thích để giúp mọi người hiểu cách giải quyết vấn đề này – Illidanek

+0

Nếu bạn nhập thứ gì đó và nhấn 'Enter', sự kiện' place_changed' sẽ được ném và đối tượng get place sẽ được trả về với một tên thuộc tính duy nhất văn bản bạn đã nhập. – lcguida

-1

Hia Tôi đã cố gắng làm điều đó bằng cách tạo ra các đối tượng autocomplete mỗi khi người dùng tập trung lĩnh vực đầu vào, và kiểm tra giá trị của nó mỗi lần nó blured :

var autocompleteField; 
var input = document.getElementById('YOUR_INPUT'); 

$('#YOUR_INPUT').focus(function(e){ 

    if(autocompleteField){ 
     autocompleteField=null; 
    } 
    autocompleteField = new google.maps.places.Autocomplete(input); 

}); 

$('#YOUR_INPUT').blur(function(e){ 

    var results = autocompleteField.getPlace(); 
    if(!results){ 
     $(this).attr('value',''); 
    } 
}); 
-1

Tôi giải quyết được vấn đề kết hợp các đề xuất trên một vài câu trả lời khác nhau từ đây. My Textfield nơi người dùng nhập địa chỉ được gọi là txtPlaces. Đây là mã của tôi:

var pac_input = document.getElementById('txtPlaces'); 

(function pacSelectFirst(input) { 
    // store the original event binding function 
    var _addEventListener = (input.addEventListener) ? input.addEventListener : input.attachEvent; 

    function addEventListenerWrapper(type, listener) { 
     // Simulate a 'down arrow' keypress on hitting 'return' when no pac suggestion is selected, 
     // and then trigger the original listener. 
     if (type == "keydown") { 
      var orig_listener = listener; 
      listener = function(event) { 
       var suggestion_selected = $(".pac-item-selected").length > 0; 
       if ((event.which == 13 || event.which == 9) && !suggestion_selected) { 
        var simulated_downarrow = $.Event("keydown", { 
         keyCode: 40, 
         which: 40 
        }); 
        orig_listener.apply(input, [simulated_downarrow]); 
       } 

       orig_listener.apply(input, [event]); 
      }; 
     } 



     _addEventListener.apply(input, [type, listener]); 
    } 

    input.addEventListener = addEventListenerWrapper; 
    input.attachEvent = addEventListenerWrapper; 

    var autocomplete = new google.maps.places.Autocomplete(input); 

})(pac_input); 

$('#txtPlaces').blur(function(e){ 
    selectFirstAddress(pac_input); 
}); 


////Ensuring that only Google Maps adresses are inputted 
function selectFirstAddress (input) { 
    google.maps.event.trigger(input, 'keydown', {keyCode:40}); 
    google.maps.event.trigger(input, 'keydown', {keyCode:13}); 
} 

Điều này sẽ phản ứng đúng cách với phím Enter hoặc Tab, cũng như khi người dùng chọn trường khác. Hi vọng điêu nay co ich!

-1

WTF, mọi người?!?!? Google thường không có thông tin chính xác. Không sử dụng API tự động hoàn tất của họ để lựa chọn bắt buộc! Đây là lý do tại sao hàng tấn trang web không cho phép tôi sử dụng dịch vụ của họ: Tôi đang sống ở đâu đó nơi Google định vị địa chỉ. Và tôi không đơn độc.

Sử dụng xác thực địa chỉ USPS nếu bạn phải - ít nhất chúng được cập nhật nhiều hơn. Lý tưởng cho phép tự động hoàn thành nhưng cho phép ghi đè thủ công; đừng lười biếng và làm cho cuộc sống trở nên khó khăn đối với rất nhiều người trong chúng ta!

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