0

我有一个地址表格,我正在使用 Geocomplete 来填充该表格。我有我的美国州在选择谁的选项有值作为州代码和文本作为州名。如何让 Geocomplete 触发器的返回从“administrative_area_level_1”中做出正确选择?

到目前为止我所拥有的:

<select name="administrative_area_level_1"  class="form-control">
  <option value="AL">Alabama</option>
  <option value="AK">Alaska</option>
  <option value="AZ">Arizona</option>
</select>

我在 geocomplete 中更改了以下内容:

    // Assign a given `value` to a single `$element`.
// If the element is an input, the value is set, otherwise it updates
// the text content.
setDetail: function($element, value){

  if (value === undefined){
    value = "";
  } else if (typeof value.toUrlValue == "function"){
    value = value.toUrlValue();
    }
  alert(value);
  if ($element.is(":input")) {
      $element.val(value);
  } else if ($element.is('select')) {
      alert($element.attr('name') + ' ' + value);
      $element.children('text=' + value).attr("selected", "true");
  } else {
    $element.text(value);
  }
},

我添加了 if .is('select) 的部分。虽然它没有进入。我可以通过 if 块之外的警报看到状态正在通过状态名称和状态代码返回,但不确定如何捕获它。

4

1 回答 1

0

它没有进入该块,因为select它是input.

如果您的值属性是州缩写,则只需更改administrative_area_level_1administrative_area_level_1_short. 这实际上会设置值,但不会触发更改。这是我在插件中修复它的方法:

  if ($element.is(":input")) {
      $element.val(value).trigger('change');
  } else {
      $element.text(value);
  }

在我们的例子中,状态的值是数字,所以我必须过滤下拉列表中的选项,看看文本是否匹配。这是我为完成这项工作所做的工作:

  if ($element.is(":input")) {
      $element.val(value);
      if ($element.is("select")) {
          $('#' + $element.attr("id") + " option").filter(function () {
              return $(this).text() == value;
          }).prop('selected', true).trigger("change");
      }
  } else {
      $element.text(value);
  }
于 2018-03-01T20:04:45.137 回答