使用jQuery从输入框中计算货币格式并计算数据



我正在尝试混合/创建货币格式,并从输入框中计算数据。问题是当我将编号插入卖出表格:1000和QTY:2时,结果为2,应该是2000,并且使用货币格式为2.000。我已经成功创建货币格式和计算成功。

我的代码:

form

<div class="row">
  <div class="col-lg-6"><b>Sell (pcs)</b>
    <input class="form-control" name="h_jual" type="text" id="a" size="30"  onkeyup="count();" onkeydown="return numbersonly(this, event);"/>
  </div>
  <div class="col-lg-6"><b>Qty</b>
    <input class="form-control" name="qty" type="text" id="b" size="30"  onkeyup="count();"/>
  </div>
  <div class="col-lg-6"><b>Total</b>
    <input class="form-control" name="total" type="text" id="c" size="30" onkeyup="count();" readonly/>
  </div>
</div>

计算脚本:

<script type="text/javascript">
function count() {
  var a = $("#a").val();
  var b = $("#b").val();
  c = a * b; 
  $("#c").val(c);
}
</script>

货币格式脚本:

    function titik() {
      var angka = bersihPemisah(bersihPemisah(bersihPemisah(bersihPemisah(document.getElementById('harga').value)))); //input ke dalam angka tanpa titik
      if (document.getElementById('harga').value == "") {
      alert("Jangan Dikosongi");
      document.getElementById('harga').focus();
      return false;
      }
      else
      if (angka >= 1) {
      alert("angka aslinya : "+angka);
      document.getElementById('harga').focus();
      document.getElementById('harga').value = tandaPemisahTitik(angka);
      return false;
      }
    }
    function tandaPemisahTitik(b){
        var _minus = false;
        if (b<0) _minus = true;
        b = b.toString();
        b=b.replace(".","");
        b=b.replace("-","");
        c = "";
        panjang = b.length;
        j = 0;
        for (i = panjang; i > 0; i--){
             j = j + 1;
             if (((j % 3) == 1) && (j != 1)){
               c = b.substr(i-1,1) + "." + c;
             } else {
               c = b.substr(i-1,1) + c;
             }
        }
        if (_minus) c = "-" + c ;
        return c;
    }
    function numbersonly(ini, e){
        if (e.keyCode>=49){
            if(e.keyCode<=57){
            a = ini.value.toString().replace(".","");
            b = a.replace(/[^d]/g,"");
            b = (b=="0")?String.fromCharCode(e.keyCode):b + String.fromCharCode(e.keyCode);
            ini.value = tandaPemisahTitik(b);
            return false;
            }
            else if(e.keyCode<=105){
                if(e.keyCode>=96){
                    //e.keycode = e.keycode - 47;
                    a = ini.value.toString().replace(".","");
                    b = a.replace(/[^d]/g,"");
                    b = (b=="0")?String.fromCharCode(e.keyCode-48):b + String.fromCharCode(e.keyCode-48);
                    ini.value = tandaPemisahTitik(b);
                    //alert(e.keycode);
                    return false;
                    }
                else {return false;}
            }
            else {
                return false; }
        }else if (e.keyCode==48){
            a = ini.value.replace(".","") + String.fromCharCode(e.keyCode);
            b = a.replace(/[^d]/g,"");
            if (parseFloat(b)!=0){
                ini.value = tandaPemisahTitik(b);
                return false;
            } else {
                return false;
            }
        }else if (e.keyCode==95){
            a = ini.value.replace(".","") + String.fromCharCode(e.keyCode-48);
            b = a.replace(/[^d]/g,"");
            if (parseFloat(b)!=0){
                ini.value = tandaPemisahTitik(b);
                return false;
            } else {
                return false;
            }
        }else if (e.keyCode==8 || e.keycode==46){
            a = ini.value.replace(".","");
            b = a.replace(/[^d]/g,"");
            b = b.substr(0,b.length -1);
            if (tandaPemisahTitik(b)!=""){
                ini.value = tandaPemisahTitik(b);
            } else {
                ini.value = "";
            }
            return false;
        } else if (e.keyCode==9){
            return true;
        } else if (e.keyCode==17){
            return true;
        } else {
            //alert (e.keyCode);
            return false;
        }
    }

任何帮助都会非常感谢,谢谢

您可以提供错误还是出了什么问题?您可能不会将您的输入解析为int,即var a = parseInt($("#a").val());您在哪里调用titik()函数?

为什么您在id="c"上致电onkeyup="count()"

编辑:我已经更新了小提琴,以考虑输入中的"点"。检查这个小提琴。

function count() {
  var a = parseFloat($("#a").val().replace(/(.)|(,)/g,(m,p1,p2) => p1 ? p1 = "" : p2 = "."));
  var b = parseFloat($("#b").val().replace(/(.)|(,)/g,(m,p1,p2) => p1 ? p1 = "" : p2 = "."));
  c = a * b; 
  if (!isNaN(c)) {
    $("#c").val(c);
  }
}

**旧小提琴。和旧代码:

function count() {
  var a = parseInt($("#a").val());
  var b = parseInt($("#b").val());
  c = a * b; 
  if (!isNaN(c)) {
    $("#c").val(c);
  }
}

毫无疑问,有很多方法可以处理此操作,因为我们甚至不能同意如何表达数字小数 - 我们是否使用点或逗号?除非我在搜索模糊逻辑中没有发现一些魔术子弹似乎是最好的方法:

主要目的是检测到定界符:

  1. 检查逗号和DOT是否存在,因为这应该意味着小数指针是最后使用的指针 - 解析数字。
  2. 检测您的格式,即您是逗号或点用户。应将其视为模糊逻辑的首选和主要假设。也就是说,您是否将100或100.00
  3. 写入100
  4. 尝试用1。
  5. 的假设解码用户输入数字。
  6. 相反地查看数字,如果最后两个数字后面是逗号或十进制的数字,则将其作为定界符和解析。

希望没有数字5,也可以主张您的号码某些条件,以便您可以进行一些计算,并看到这是不对的,并在发布之前验证了数字。

也可能是一个好主意,将占位符用于需要数字以包含样本号的字段,以便用户看到要使用的定界符。

如果您有一个国际网站,其中包括来自Maby的各地的数字,则可以使用Geoip来定位用户的位置。这可以用来预选最有可能的定界符 - 就像在斯堪的纳维亚半岛一样,我们使用逗号作为定界数,在美国,它们使用dot。

在我看来,除非您知道您的数字来自何处,否则这里没有明确的税收 - 互联网意味着您没有任何线索。

相关内容

  • 没有找到相关文章

最新更新