Состояние набора триггеров Geocomplete в select

У меня есть форма для адресов, и я использую Geocomplete, чтобы заполнить эту форму. У меня есть штаты США в опциях выбора, которые имеют значения в качестве кодов штатов и текст в качестве названия штатов. Как я могу получить возврат из триггера Geocomplete, чтобы сделать правильный выбор из 'administrator_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('выберите). Это не входит, хотя. За пределами блока if я вижу предупреждение о том, что состояние возвращается по названию состояния и коду состояния, но я не уверен, как его перехватить.

1 ответ

Это не входит в этот блок, потому что select это тип input,

Если ваши значения атрибутов являются аббревиатурами штата, вам просто нужно изменить administrative_area_level_1 в administrative_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);
  }
Другие вопросы по тегам