javascript - Jquery选择更改
问题描述
我有一个选择框(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);
});
}
});
});
它的工作,但第一次,第二次改变不会改变预先输入的值,
我在这里想念什么?
解决方案
它的工作,但第一次,第二次改变不会改变预先输入的值,
我认为那是因为第二次、第三次等等,AJAX URL 不再改变了;那是因为它specie
仍然是最初分配给它的值。
我的意思是,假设您Cat
从下拉菜单中选择;因此该change
菜单的第一个事件被触发,并specie
设置为Cat
. 但是,当您稍后选择Horse
(或Dog
)时,选项specie
闭包内的 fromsource
仍为Cat
。
这支笔可以帮助您理解它。
因此,一个简单的解决方法是将其引用specie
到this
而不是this.value
.
$(document).on('change', '.specie-breed2', function() {
let specie = this; // Reference the Element.
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie.value, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
或者你可以这样做:
$('#breed').typeahead({
source: function (query, process) {
if ( ! $( '#species' ).val() ) {
return;
}
return $.get('/get/breeds/' + $( '#species' ).val(), { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
更新
实际的解决方案,或者你在代码中缺少的东西,(我认为)是:Destroy typeahead
on the #breed
field before re-initializing typeahead
on that field。
$(document).on('change', '.specie-breed', function() {
let specie = this.value;
// Destroy existing instance.
$('#breed').typeahead( 'destroy' );
// (Re-)Initialize `typeahead`.
$('#breed').typeahead({
source: function (query, process) {
return $.get('/get/breeds/' + specie, { query: query }, function (data) {
console.log(data);
return process(data);
});
}
});
});
这样,specie
可以分配或引用到this.value
(即当前选择的“物种”),并且您将获得正确的值(例如Cat
或Dog
)。
推荐阅读
- mysql - 计算单词在文本中出现的次数,不包括一些大写的单词
- r - R中的sankey图 - 数据准备
- ionic-framework - 通过router.navigate导航到另一个页面时如何将函数作为参数传递?
- microsoft-cognitive - Microsoft 认知服务自定义视觉 - 无需预测 API 即可使用
- python - 如何在 Jupyter Notebook 或 JupyterLab 单元中运行单行代码或选定代码?
- c# - NHibernate EventListener 设置属性 null
- algorithm - 如何检测不一致的坐标模式?
- php - 漂亮的打印对象导致 PHP
- libgdx - Libgdx 可点击对象?
- wordpress - 带有儿童组织的类别:wordpress