我有另外一个问题,因为我还是javascript和jQuery的新手。我正在使用Ajax更新带有值的隐藏字段。 Ajax在选择办公室(在一个州可以有多个办公室)时发送回正确的计费域(提供服务的状态)。
这是我正在努力的jQuery。
我正在使用此部分来确保在页面加载时隐藏或显示BillingDomainID1类,在下拉选择之前。这很有效。
if($("#BillingDomainID").val() != 1){
$(".BillingDomainID1").hide();
} else {
$(".BillingDomainID1").show();
};
这部分是我遇到麻烦的地方。 getOfficeInfo部分是完美无缺的,因为它会按预期发布BillingDomainID值,但下面的If语句要求我在If语句工作之前单击OfficeID下拉值两次。 为了好玩,我在getOfficeInfo和if语句之间添加了一个警告('hi'),它使if语句起作用。几乎看起来getOfficeInfo部分没有足够快地更新值以使if语句起作用。我该怎么做才能解决这个问题?
$("#OfficeID").change(function() {
getOfficeInfo($("#OfficeID").val(),$("#BillingDomainID"));
if ($('#BillingDomainID').val() != 1) {
$('.BillingDomainID1').hide();
return;
} else {
$('.BillingDomainID1').show()
}
});
非常感谢你的帮助!
答案 0 :(得分:2)
只是怀疑,但你是在getOfficeInfo
函数中调用ajax吗?
如果是这样,那么很可能是异步调用,因此在值更新之前,它不会等待服务器响应并且if
语句执行得太快。
你应该把这段代码
if ($('#BillingDomainID').val() != 1) {
$('.BillingDomainID1').hide();
return;
} else {
$('.BillingDomainID1').show()
}
成功处理程序中的ajax。
所以你的getOfficeInfo
函数看起来像这样
function getOfficeInfo(OID, BDID) {
//alert(OID);
//alert(BDID);
$.post("/UserControls/getOfficeInfo.asp", {OfficeID: OID}, function(data) {
BDID.val(data);
if (data != 1) {
$('.BillingDomainID1').hide();
} else {
$('.BillingDomainID1').show()
}
});
//alert(data);
}
此更改的解释是,当您调用$.post(...)
时,此函数会立即返回,但在服务器响应您的请求后会调用内部函数function(data) {...}
。因此,取决于服务器响应的所有调用应该在该函数内,以确保您拥有当前数据。