【发布时间】:2018-05-08 08:28:55
【问题描述】:
我有一个选择框(Specie)和一个 typeAhead 输入字段(Breed),我需要更新选择框的变化,我有以下代码。
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 profile-fields-margin-bottom">
<select class="form-control select_field_style specie-breed" id="species" name="species" required>
<option disabled selected>Select a Species</option>
<option value="Dog">Dog</option>
<option value="Cat">Cat</option>
<option value="Horse">Horse</option>
</select>
</div>
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 profile-fields-margin-bottom">
<input id="breed" type="text" class="form-control charsonly" name="breed" placeholder="Breed">
</div>
$(document).on('change', '.specie-breed', function() {
let specie = this.value;
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
它的工作,但第一次,第二次更改不会改变预先输入的值,
我在这里错过了什么?
【问题讨论】:
-
听起来您可能需要使用委托事件处理程序。
process()函数是否重新创建了.specie-breed元素? -
您实际上是为每个触发的
onchange事件创建一个新的预输入实例。这会在一段时间后大大降低浏览器的速度。 -
@RoryMcCrossan 是的
process()函数重新创建 .specie-breed 元素。 -
@Terry 那么最好的方法是什么>
-
使用委托事件处理程序。有关详细信息,请参阅我标记的副本。
标签: javascript jquery select typeahead.js