使用jquery从输入框中格式化和计算数据

时间:2016-12-19 13:22:24

标签: jquery onkeydown onkeyup

我试图混合/创建货币格式并计算输入框中的数据。问题是当我将数字插入卖出形式时:1000和数量:2,结果是2,它应该是2000,货币格式应该是2.000。我已经成功,只能单独创建货币格式和计算。

我的代码:

表格

<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;
        }

    }

货币格式化脚本:

view.setVisibility(View.GONE);

任何帮助都会如此欣赏,谢谢

2 个答案:

答案 0 :(得分:0)

您能提供错误或出错吗? 您可能想要将输入解析为int,即var a = parseInt($("#a").val()); 你在哪里称之为titik()函数?

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

编辑:我已经更新了小提琴,以便考虑到“点”这个问题。在输入中。 检查此fiddle

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);
  }
}

**老小提琴fiddle。 旧代码:

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

答案 1 :(得分:0)

毫无疑问,有很多方法可以解决这个问题,因为我们甚至无法就如何表示数字小数表达成一致 - 我们使用点还是逗号?除非有一些我在搜索中找不到的神奇子弹,否则模糊逻辑似乎是最好的方法:

主要目标是检测分隔符:

  1. 检查是否存在逗号和点,因为这意味着小数指针是最后使用的 - 解析数字。
  2. 检测您的格式,即您是逗号还是点用户。这应该被视为模糊逻辑的首选和主要假设。也就是说,你写100为100,00或100.00
  3. 尝试将用户输入解码为数字,假设为1。
  4. 反过来查看数字,如果最后两位数后跟逗号或小数,则将其作为分隔符并解析。
  5. 希望没有数字5,或者它可以为您的号码断言某些标准,以便您可以进行一些计算并发现这不正确并促使用户在发布前验证数字。

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

    如果您有一个国际网站,其中包含从全部maby输入的数字,您可以使用geoip找到您的用户的位置。这可用于预先选择最可能的分隔符 - 就像在斯堪的纳维亚半岛我们使用逗号作为分隔符而在美国它们使用点。

    在我看来,除非你知道你的号码来自哪里,否则这里没有明确的解决方案 - 互联网意味着你没有任何线索。