簡體   English   中英

沒有alert(),JavaScript將無法正常工作

[英]Javascript does not work without alert()

我有一個Javascript函數,在我注釋掉/或刪除alert()行之前,它可以正常工作。 如果存在且具有值,則最多可計算30個字段的總和。

HTML:

<input type="text" onblur="Calculatenettobrutto(1);">

JavaScript的:

function Calculatenettobrutto(n) {
  var Feldnummer=n;
  var nettowert,bruttowert;
  var nettosumme, bruttosumme,neuenettosumme,neuebruttosumme;
  var Wertfuer='Mehrwertsteuersatz'
  //Mehrwertsteuer auslesen
  var dataString = 'Name='+Wertfuer;
  var thisObject = this;
  this.wert=$.ajax({
    type: "POST",
    url: "ajax_get_Einstellungen.php",
    data: dataString,
    cache: false,
    success: function(wert) {
      nettowert = document.getElementById('Netto'+Feldnummer).value;
      bruttowert = parseFloat(nettowert) * wert;
      document.getElementById('Brutto'+Feldnummer).value=parseFloat(bruttowert);
      return wert;
    }
  });

  var nettosumme=0,bruttosumme=0, x=1;
  while (x < 30) {
  var Feldname='Netto'+x;
  if ( document.getElementById('Netto'+x) ) {
    //If field Netto+x exist then check if it has a value
    var nettowert=document.getElementById('Netto'+x).value;
    //if it has a value add values to nettosumme and bruttosumme
    if (nettowert) {
      nettosumme=parseFloat(nettosumme)+parseFloat(document.getElementById('Netto'+x).value);
      //IF I COMMENT THIS OUT, I get a NAN in my Bruttosumme column
      alert(nettosumme);
      bruttosumme=parseFloat(bruttosumme)+parseFloat(document.getElementById('Brutto'+x).value);
    }
  }
  x++;
}
document.getElementById('Nettosumme').value=parseFloat(nettosumme);
document.getElementById('Bruttosumme').value=parseFloat(bruttosumme);

}

即使刪除alert()行,我如何使它工作?

問題是您執行了異步ajax請求:

<input type="text" onblur="Calculatenettobrutto(1)" />

用戶離開該字段后,將立即調用Calculatenettobrutto 然后,您的函數稱為:

var Feldnummer = 1;
this.wert=$.ajax({
   ...
   success: function(wert) {
      ...
      nettowert = document.getElementById('Netto'+Feldnummer).value;
      bruttowert = parseFloat(nettowert) * wert;
      document.getElementById('Brutto'+Feldnummer).value=parseFloat(bruttowert);
   }
});

//alert("Wait a little");
document.getElementById('Brutto'+Feldnummer).value <-- BANG

這里的問題如下:從服務器返回ajax調用的結果時,將調用ajax()中定義的函數,而ajax()之后的代碼將立即執行。 因此,您嘗試在設置之前從字段中獲取值。

當警報窗口可見時,腳本將被掛起,ajax調用將返回並執行設置“ Brutto ...”值的“成功”代碼。 關閉警報后,將執行代碼,現在“ Brutto ...”具有值。

可能最簡單的解決方案是將您的總和計算函數移至“成功”函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM