Jquery。使用If语句

时间:2016-02-23 15:59:52

标签: javascript jquery

我有另外一个问题,因为我还是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()
        }

    });

非常感谢你的帮助!

1 个答案:

答案 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) {...}。因此,取决于服务器响应的所有调用应该在该函数内,以确保您拥有当前数据。