【问题标题】:google autocomplete setComponentRestrictions谷歌自动完成 setComponentRestrictions
【发布时间】:2016-01-31 11:30:29
【问题描述】:

设置setComponentRestrictions 值有什么限制吗?因为它在设置动态值时不起作用。

场景 1(工作正常)

在这种情况下,我将县值硬编码为仅搜索该国家/地区的特定城市。因此,当我使用硬编码值时,这可以正常工作。

var input = document.getElementById('searchCity');
var options = { types: ['(cities)'],componentRestrictions: {country: 'us' }};
var autoComplete = new google.maps.places.Autocomplete(cityInput,options);`

场景 2(不工作)

在此,我有另一个文本字段,用于使用 autcomplete 查找国家/地区并将 short_code 值存储在 shortNameCountry Id 中。但是当我传递动态值时,这不起作用。

var input = document.getElementById('searchCity');
var countryOpt = $("#shortNameCountry").val().toLowerCase();
var options = {types: ['(cities)'], componentRestrictions: {country: countryOpt }};
var autoComplete = new google.maps.places.Autocomplete(input,options);

(我已经添加了我的场景。但我不知道 stackoverflow 继续要求我添加更多细节。我只是写这些行来解决那个警报。) 请帮我解决这个问题。

【问题讨论】:

    标签: javascript google-maps-api-3 reactjs


    【解决方案1】:

    目前您的代码使用属性componentRestrictions,当您创建自动完成时,该属性将具有输入的值。

    要更改此属性,您必须在输入值更改时调用方法setComponentRestrictions

    function initialize() {
    
            var iso           = ['AD','AE','AF','AG','AI','AL','AM','AO','AQ','AR','AS','AT','AU','AW','AX','AZ','BA','BB','BD','BE','BF','BG','BH','BI','BJ','BL','BM','BN','BO','BQ','BR','BS','BT','BV','BW','BY','BZ','CA','CC','CD','CF','CG','CH','CI','CK','CL','CM','CN','CO','CR','CU','CV','CW','CX','CY','CZ','DE','DJ','DK','DM','DO','DZ','EC','EE','EG','EH','ER','ES','ET','FI','FJ','FK','FM','FO','FR','GA','GB','GD','GE','GF','GG','GH','GI','GL','GM','GN','GP','GQ','GR','GS','GT','GU','GW','GY','HK','HM','HN','HR','HT','HU','ID','IE','IL','IM','IN','IO','IQ','IR','IS','IT','JE','JM','JO','JP','KE','KG','KH','KI','KM','KN','KP','KR','KW','KY','KZ','LA','LB','LC','LI','LK','LR','LS','LT','LU','LV','LY','MA','MC','MD','ME','MF','MG','MH','MK','ML','MM','MN','MO','MP','MQ','MR','MS','MT','MU','MV','MW','MX','MY','MZ','NA','NC','NE','NF','NG','NI','NL','NO','NP','NR','NU','NZ','OM','PA','PE','PF','PG','PH','PK','PL','PM','PN','PR','PS','PT','PW','PY','QA','RE','RO','RS','RU','RW','SA','SB','SC','SD','SE','SG','SH','SI','SJ','SK','SL','SM','SN','SO','SR','SS','ST','SV','SX','SY','SZ','TC','TD','TF','TG','TH','TJ','TK','TL','TM','TN','TO','TR','TT','TV','TW','TZ','UA','UG','UM','US','UY','UZ','VA','VC','VE','VG','VI','VN','VU','WF','WS','YE','YT','ZA','ZM','ZW'];
                goo           =  google.maps,
                input         = document.getElementById('searchCity'),
                country       = document.getElementById('shortNameCountry'),
                options       = {types: ['(cities)']},
                autoComplete  = new google.maps.places.Autocomplete(input,options);
            
            goo.event.addDomListener(country,'input',function(){
              var val=this.value.trim().toUpperCase();
              if(iso.indexOf(val)>-1){
                this.style.background='white';
                input.value=' ';
                autoComplete
                .setComponentRestrictions({country:val});
                
              }
              else{
                this.style.background='red';
              }
            });
            goo.event.trigger(country,'input');
            
          }
    
          google.maps.event.addDomListener(window, 'load', initialize);
    <input id="searchCity"/>
      <input id="shortNameCountry" size="2" maxlength="2" value="de"/>
    <script src="https://maps.googleapis.com/maps/api/js?v=3&libraries=places"></script>

    【讨论】:

    • 感谢您的解决方案。但这不符合我的要求。让我解释清楚。我有两个自动完成文本字段,一个用于国家,一个用于城市。由于可以选择仅查找国家/地区,因此我将国家/地区 short_code 存储在隐藏字段(shortNameCountry)中。因此,当用户搜索城市字段时,它应该从隐藏字段中获取值作为国家选项并找到城市。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2011-09-19
    • 2016-03-24
    • 2016-11-17
    • 2018-01-26
    相关资源
    最近更新 更多