Состояние набора триггеров 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);
}