选择中的 Geocomplete 触发器设置状态
Posted
技术标签:
【中文标题】选择中的 Geocomplete 触发器设置状态【英文标题】:Geocomplete trigger set state in select 【发布时间】:2017-04-20 20:58:44 【问题描述】:我有一个地址表格,我正在使用 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 块之外的警报看到状态正在通过状态名称和状态代码返回,但不确定如何捕获它。
【问题讨论】:
【参考方案1】:它没有进入那个块,因为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);
【讨论】:
以上是关于选择中的 Geocomplete 触发器设置状态的主要内容,如果未能解决你的问题,请参考以下文章
上下文提供程序中的 componentDidMount() 状态更改未触发子组件的重新渲染
使用 geocomplete 反应 LinkedStateMixin
如何使用 .geocomplete 减少对 GoogleMaps API 的请求数量