Javascript函数未按预期工作

时间:2016-09-21 07:36:07

标签: javascript jquery asp.net

我有一个无法正常工作的功能。

问题在于,我已经设置了

if (Trim(ObjPriXMLHTTP.responseText) != 0)然后它应该进入并运行另一个函数,当我的if (Trim(ObjPriXMLHTTP.responseText) != 0) == 1时,它不会出现。

调试器只是抛弃了父函数。  我希望在值不是0

时运行

以下是我的js函数

function getCounterForCheck() {
        StrPriFnName = "getCounterForCheckInward(" + document.getElementById('TxtInwardNo').value + ")";
        var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
        ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false);
        ObjPriXMLHTTP.send("");

        if (Trim(ObjPriXMLHTTP.responseText) != 0) {

            function getOtherDBInward() {
                StrPriFnName = "FunGetOTHERDBInward(" + document.getElementById('TxtInwardNo').value + ")";
                var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
                ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false);
                ObjPriXMLHTTP.send("");

                if (Trim(ObjPriXMLHTTP.responseText) != "") {
                    var StrPriData = ObjPriXMLHTTP.responseText.split('~');
                    document.getElementById('HidRefMkey').value = StrPriData[0];
                    document.getElementById('TxtDeliveredBy').value = StrPriData[1];
                    document.getElementById('cmbRecdDept').value = StrPriData[2];
                    FunEmpFillDept();
                    document.getElementById('cmbRecdEmp').value = StrPriData[3];
                    document.getElementById('HidCurrentEmp').value = StrPriData[3];
                    document.getElementById('Txt_RefBillNo').value = StrPriData[6];
                    igdrp_getComboById("DtmInfRef_DocDate").setValue(Trim(StrPriData[7]));
                    igedit_getById("TxtWN_Billamt").setValue(StrPriData[8]);
                    document.getElementById('TxtRemarks').value = StrPriData[9];
                    document.getElementById('TxtPartyName').value = StrPriData[10];
                }

                else {
                    alert("ERROR: Document does not exist");
                    //alert("ERROR: Document does not exist and status also");
                    document.getElementById('TxtInwardNo').focus();
                    return false;
                }
            }

        }
        else {
            //alert('invoice not found');
        }
    }

1 个答案:

答案 0 :(得分:2)

该代码存在一些问题。

  1. 在ES2015之前,声明流控制块内的一个函数(如if的正文)是无效的,它仍然是一个真正的坏主意™ 。但这就是你的代码正在做的事情。

  2. 宣布该功能,但您尚未调用它。因此,步进正是调试器应该做的事情;在getCounterForCheck中没有什么可做的。

  3. 在评论中,您已说Trim(ObjPriXMLHTTP.responseText)将返回"1""0"(例如字符串)。但是,您要将其与0(数字)进行比较。由于您使用的是松散比较(!=),因此JavaScript会强制为您提供价值,在这种特殊情况下,它会以您可能期望的方式执行此操作。我提出这个问题只是因为Trim显式转换价值并返回10(例如数字)可能是有意义的。

  4. 将函数声明为 if块,如果要调用它,则调用它。类似的东西:

    function getCounterForCheck() {
        StrPriFnName = "getCounterForCheckInward(" + document.getElementById('TxtInwardNo').value + ")";
        var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
        ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false);
        ObjPriXMLHTTP.send("");
    
        if (Trim(ObjPriXMLHTTP.responseText) != 0) {
            getOtherDBInward();
        }
        else {
            //alert('invoice not found');
        }
    
        function getOtherDBInward() {
            StrPriFnName = "FunGetOTHERDBInward(" + document.getElementById('TxtInwardNo').value + ")";
            var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
            ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false);
            ObjPriXMLHTTP.send("");
    
            if (Trim(ObjPriXMLHTTP.responseText) != "") {
                var StrPriData = ObjPriXMLHTTP.responseText.split('~');
                document.getElementById('HidRefMkey').value = StrPriData[0];
                document.getElementById('TxtDeliveredBy').value = StrPriData[1];
                document.getElementById('cmbRecdDept').value = StrPriData[2];
                FunEmpFillDept();
                document.getElementById('cmbRecdEmp').value = StrPriData[3];
                document.getElementById('HidCurrentEmp').value = StrPriData[3];
                document.getElementById('Txt_RefBillNo').value = StrPriData[6];
                igdrp_getComboById("DtmInfRef_DocDate").setValue(Trim(StrPriData[7]));
                igedit_getById("TxtWN_Billamt").setValue(StrPriData[8]);
                document.getElementById('TxtRemarks').value = StrPriData[9];
                document.getElementById('TxtPartyName').value = StrPriData[10];
            }
    
            else {
                alert("ERROR: Document does not exist");
                //alert("ERROR: Document does not exist and status also");
                document.getElementById('TxtInwardNo').focus();
                return false;
            }
        }
    }
    

    我还没有密切关注这个功能,但如果它不必嵌套在getCounterForCheck内,你可能会将其移出。