如何在jquery /或javascript中运行异步代码同步?
我正在使用EC5和Jquery 1.8
我有3个下拉列表;
- 城市
- 县
- 地区
我为第一个选择分配了一个jquery事件,名为id:“CityId”。当用户选择城市时,我需要将CountyId(2.dropdown)值设置为零。并且“showHideDistrictSelection”方法查找选定的CityId和选定的区域以决定是否显示区域。
问题是,在将CountyId值设置为0 之前,函数“showHideDistrictSelection”的工作速度非常快。这是代码;
$("#CityId").change(function () {
$("#CountyId").val("0");
showHideDistrictSelection("#DistrictArea");
});
所以我改变了这样的事件功能;
$("#CityId").change(function () {
$("#CountyId").val("0");
setTimeout(function() {
showHideDistrictSelection("DistrictArea");
}, 200);
});
现在它正在运行,但我确定这不是最佳做法。我认为我在这里遇到异步问题。那我需要什么?延迟对象done(),when(),promise()函数等?或其他事件?我正在使用jquery但是如果你想提供一些代码,那么vanilla js也可以。
我会很高兴任何评论(更改你的问题的标题,改变你的问题,做到这一点,做出那样的等等)。
更新,我添加了show / hide区功能;
function showHideDistrictSelection() {
var selectedCityText = $('#CityId :selected').text().toLowerCase();
var selectedCountyId = $("#CountyId :selected").val();
var $districtDropDownList = $("#DistrictId");
if (selectedCityText.endsWith("w york") && selectedCountyId > 0) {
$("#DistrictArea").show();
$.ajax({
cache: false,
type: "GET",
url: addressUrls.GetDistricts,
data: { countyId: selectedCountyId },
success: function (data) {
$districtDropDownList.html("");
$("#DistrictId").append("<option value='0' selected='selected'>Select (*)</option>");
for (var i = 0; i < data.length; i++) {
$districtDropDownList.append("<option value='" + data[i].id + "'>" + data[i].name + "</option>");
}
}
});
}
else {
$("#DistrictArea").hide();
$('#DistrictId').val("0");
}
}
所以函数showHideDistrictSelection工作得非常快,在更改事件之前我将CountyId值设置为0 ...;我的意思是,当我通过$(“#CountyId:selected”)得到selectedCountyId时.val();我仍然将CountyId大于0.因为$(“#CountyId”)。val(“0”);没完成工作。
抱歉,我有点试图清楚地定义问题。