如何让Select2在国家/地区值更改时更新ajax调用
How to get Select2 to update a ajax call when country value is changed
我似乎找不到一个简单的例子来说明如何在国家/地区列表发生变化时更新州列表。我看到的所有例子都使用了各种各样的钻头和配件,这些钻头和配件的工作取决于版本和给出解决方案的人。
有人能帮助我如何在没有丑陋的黑客攻击的情况下轻松完成这项工作吗。到目前为止,我已经尝试过了,虽然它有效,但如果我第二次更改下拉列表,新值只会附加到旧值上,而不是替换它们。我尝试过破坏和重建,但旧的价值观依然存在。
从服务器返回的数据是带有id和文本值的有效json。到目前为止,当国家更改时,我没有幸运地让州列表更新为新的国家-州值
<select id="country" name="country" class="form-control" data-placeholder="Select...">
<optgroup label="Country">
<option></option>
<option value="US" > United States</option>
<option value="AU" > Austrailia</option>
</optgroup>
</select>
<select id="state" name="state" class="form-control" data-placeholder="Select...">
<optgroup label="State">
<option></option>
</optgroup>
</select>
$("#country").select2().on("change", function(e) {
var country = e.val;
$.post("states", {
country_id: country
}, function(e) {
if (e)
$("#states").select2({
data: e
});
})
});
$("#state").select2();
这些是从服务器发回的值
[{ id: 'ALB', text: 'ALABAMA' }, { id: 'ALS', text: 'ALASKA' }, { id: 'ARI', text: 'ARIZONA' }]
在设置新数据之前,您必须从select中删除<option>
标记:
$.post("states", {
country_id: country
}, function(e) {
if (e){
$("#states option").remove();
$("#states").select2({
data: e
});
}
})
您可能需要完善我的示例,以避免删除占位符(如果有的话)。
另请参阅此JSFiddle:https://jsfiddle.net/drj84go5/
最好的选择是输入(文本)而不是select2,然后使用ajax通过select2函数进行转换。
输入:
<input type="text" id="states">
Javascript:
$('#states').select2({
placeholder: "States...", // placeholder
allowClear: true,
minimumInputLength: 0,
dropdownCssClass: "bigdrop",
width: '100%',
ajax: {
quietMillis: 2500,
url: "/Search/_SearchStates", // Server-side action
dataType: 'json',
data: function (term, page) {
return {
Text: term, // Text to search for
CountryId: $("#country").val(), // CountryId from #countries
};
},
results: function (data, page) {
return { results: data };
},
},
formatResult: function (item) {
return item.StateName; // Table name/description
},
id: function (element) {
return element.StateId; // Table id/code
},
formatSelection: function (item) {
return item.StateName; // Table name/description
}
});
您需要有一个服务器端操作,它将为您提供状态列表。
要获得StateId,您需要执行以下操作:
$("#states").select2('val');
相关文章:
- 如何在视图模型contet更新更新上调用Jquery函数
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- AngularJS:调用函数时编号不更新
- 使用Ajax调用在服务器上实时更新页面
- 主干:视图's的呈现方法被调用,但DOM未更新
- 如何在更新面板内部调用/触发javascript函数<触发器>标签
- 从Document调用onchange函数.已准备好从更新中预先选择的项目
- 在Knockout中进行ajax调用后,ViewModel不会更新
- 由控制器调用的服务更改时,Angular未更新视图
- 如何在从下拉列表中选择不同的值后更新和调用javascript函数
- 在分析云代码中调用更新
- AngularJs在调用服务方法后更新指令
- 当视图在AngularJS中返回时,我如何获得异步服务调用来更新视图
- 如何在自动完成更新时调用JS函数
- Angular js - 异步调用 $scope.users 后不更新模态值
- 如果我不应该在组件WillUpdate中调用setState,如何更新状态(使用ReactJS)
- 为什么'这些AJAX调用正在更新我的变量
- 从$http.get调用更新Angular作用域变量
- JSF在Ajax更新后调用javascript函数
- 被调用函数中的数组push如何更新调用函数中的数组,调用函数将数组传递给javascript中的函数