我有一个地址表单,我正在使用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>
我在地理填充中更改了以下内容:
// 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块之外的警告看到状态通过州名和州代码返回,但我不确定如何捕获它。
答案 0 :(得分:0)
它没有进入该区块,因为select
是input
的一种类型。
如果您的值属性是州缩写,则只需将administrative_area_level_1
更改为administrative_area_level_1_short
即可。这实际上会设置值,但不是trigger the change。以下是我在插件中修复它的方法:
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);
}