我正在使用Eric Hynd 出色的多选插件来填充几个下拉菜单。
一是业务单位:...
$('#lbBusinessUnits').multiselect({
height: "auto",
selectedList: 20
});
...第二个是业务领域(#lbBusinessAreas)。...
$('#lbBusinessAreas').multiselect({
selectedList: 20
});
...当像这样检查一个单元时,区域列表会更新:
// Business Units List Box Change
$('#lbBusinessUnits').bind("multiselectclick", function (event, ui) {
var selectedPeriod = $('#ddlSalesPeriods').val();
var selectedUnit = ui.value;
var selectedUnitText = ui.text;
var checkedUnit = ui.checked;
var areChecked = $(this).multiselect("getChecked").map(function () { return this.value; }).get();
if (areChecked.length > 0) {
url = '/InvoiceException/LoadBusinessareasBySalesPeriodBusinessUnit';
$.getJSON(url, { selectedSalesPeriod: selectedPeriod, selectedBusinessUnits: areChecked }, function (areas) {
var areaSelect = $('#lbBusinessAreas');
areaSelect.empty();
$.each(areas, function (index, optionData) {
areaSelect.append($('<option/>', { value: optionData.Id, text: optionData.Name }));
});
});
}
else {
var url = '/InvoiceException/LoadBusinessAreasBySalesPeriod';
$.getJSON(url, { selectedSalesPeriod: selectedPeriod }, function (areas) {
var areaSelect = $('#lbBusinessAreas');
areaSelect.empty();
$.each(areas, function (index, optionData) {
areaSelect.append($('<option/>', { value: optionData.Id, text: optionData.Name }));
});
});
}
$('#lbBusinessAreas').multiselect("refresh");
});
JSON 结果由 MVC3 控制器处理,并从 URL 调用中正确返回。IE 返回的数据看起来不错。
但是,区域框 (#lbBusinessAreas) 在单击后不会正确更新。它似乎落后了。似乎在刷新框时出现了竞争条件。
当我将它放入 Firebug 并在它调用 multiselect("refresh") 的点放置一个断点时,当我逐步通过调试器并完全按照应有的方式运行时,一切正常。
这真的是在选项更新之前完成刷新的竞争条件吗?是因为它是一个 ajax/getJson 调用吗?
我是否需要移动呼叫以刷新或以某种方式找出以确保操作顺序?IE 选项需要完成更新,然后需要进行刷新。