Javascript没有alert()就不能工作

Javascript does not work without alert()

本文关键字:就不能 工作 没有 alert Javascript      更新时间:2023-09-26

我有一个运行良好的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…"有了一个值。

最简单的解决方案可能是将求和函数移到success函数