easyui-combobox实现取值范围的联动
需求:需要用两个combobox来输入一个年月的范围,下拉框的内容从服务器获取。需要实现选中前者后,后者的下拉框中不能显示比前者数值小的;选中后者后,前者的下拉框内容不能显示比后者数值大的
有两个combobox,id为dtStartDate和dtEndDate
$(document).ready(function () {
getFullData();
initDateByCity();
})
// 因为两个combobox的下拉框的内容是会变化的,所以要有一个完全的版本用于筛选
// 否则如果使用下拉框的内容作为筛选源,只会越来越少
var FullData;
var getFullData = function () {
$.ajax({
type: 'post',
url: 'your url',
async: true,
success: function (result) {
FullData = result;
}
})
}
var initDateByCity=function(){
$('#dtStartDate').combobox({
url: 'your url',
valueField: 'Val',
textField: 'Val',
multiple: false,
model: 'remote',
method: 'post',
// 使用onSelect会陷入死循环
onClick: function (item) {
// 注意这里获取的是完全版本的复制,而不是引用
var data = FullData.slice(0);
var j=0;// 因为data进行删除后,index会和FullData不一致,以此纠正
for (var i in FullData) {
if (FullData[i].Val < item.Val) {
data.splice(j, 1);
j--;
}
j++;
}
// 重新加载
$('#dtEndDate').combobox("loadData", data);
}
});
// 上同
$('#dtEndDate').combobox({
url: 'your url',
valueField: 'Val',
textField: 'Val',
multiple: false,
model: 'remote',
method: 'post',
onClick: function (item) {
var data = FullData.slice(0);
var j=0;
for (var i in FullData) {
if (FullData[i].Val > item.Val) {
data.splice(j, 1);
j--;
}
j++;
}
$('#dtStartDate').combobox("loadData", data);
}
});
}