2016-09-21 8 views
0

機能していない機能があります。JavaScript関数が期待どおりに機能していません

の問題は、私が

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'); 
     } 
    } 
+0

私たちに骨を投げてください: 'Trim'が何をするのか、' Trim(ObjPriXMLHTTP.responseText) 'をしたときの戻り値は何かを教えてください。 (後者の場合、私はあなたが '1'だと思っていたと思う。' Trime'が 'String#trim'のようなもので、文字列を返すと奇妙に思える...) –

+0

@TJCrowder:コードが間違っています。私に '1'または' 0'を返します。はい、文字列値を返します。 – BNN

+0

@ T.J.Crowder:これを行う正しい方法は何かを教えてください。 2以外の値が0以外のときは2番目の関数を実行します。 – BNN

答えて

2

です。 ™

  1. はES2015までは、(ifの体のような)フロー制御ブロック内部の機能を宣言に無効であり、それは本当に悪いアイデアのまま。しかし、それはあなたのコードがやっていることです。

  2. は、この関数をと宣言しましたが、呼び出されていません。だから、ステップアウトはまさにデバッガがすべきことです。 getCounterForCheckには何も残っていませんでした。

  3. コメントでは、Trim(ObjPriXMLHTTP.responseText)"1"または"0"(文字列など)を返すと述べています。しかし、あなたはそれを0(数字)と比較しています。あなたが緩やかな比較(!=)を使用しているので、JavaScriptはあなたの価値を強めるでしょう。この特定のケースでは、おそらくあなたが期待している方法でそれを行います。 Trimが明示的に値を変換して1または0(たとえば、数字として)を返すことが意味をなす可能性があるからです。

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内にネストする必要がない場合、あなたはそれを外に移動することがあります。

+0

私は試してみて – BNN

+0

さん、それは働いています。より正確にするために 'string'を' int'に変換することができます – BNN

+0

@nad:はい。そこにそれに関する答えがありますので、数十の質問があります。 –

関連する問題