背景:二级下拉框信息在初始化时通过ajax加载
需求:将以保存好的信息回显,下拉框选中已选信息
盲点:在初始化进行选中 $('#firstAnalysis').val('<%=ComplaintInfo.ReasonAnalysis%>');,这时ajax异步加载可能会出现val赋值发生在ajax之前,选择信息被覆盖。失败。
效果:
解决方案1:直接在初始化时用append生硬加载!
效果:
评价:使用时不理想,被吐槽!
解决方案2:在ajax请求成功后,添加完select,进行选中,同时触发二级下拉框的ajax请求,二级下拉框加载完,同样进行选中。
function getAnalysis(grade, department, firstAnalysis) {
var url = "XXX";
var data = JSON.stringify({
grade: grade,
department : department,
firstAnalysis: firstAnalysis
});
var OrderComplaintId = $('#OrderComplaintId').val();
var successFunc = function (r) {
var data = JSON.parse(r.d);
if (data.length > 0) {
data.unshift('');
}
if (grade == 1) {
$.each(data, function (i, v) {
$('#firstAnalysis').append("<option value='" + v + "'>" + v + "</option>");
});
if('<%=ComplaintInfo.ReasonAnalysis%>'!=""){
$('#firstAnalysis').val('<%=ComplaintInfo.ReasonAnalysis%>');
getAnalysis(2, $("#department").val(), $('#firstAnalysis').val());
}
}
else if (grade == 2) {
$('#secondAnalysis').empty();
$.each(data, function (i, v) {
$('#secondAnalysis').append("<option value='" + v + "'>" + v + "</option>");
});
if('<%=ComplaintInfo.SubReasonAnalysis%>'!=""){
$('#secondAnalysis').val('<%=ComplaintInfo.SubReasonAnalysis%>');
}
}
}
OrderBase.ajaxPost(url, data, successFunc, function () { });
};
效果:
评价:满足需求
总结:考虑到ajax异步请求的问题,合理做出解决,在先加载后赋值的情况下考虑先后问题