【问题标题】:Show Thousands Separator within input field only仅在输入字段中显示千位分隔符
【发布时间】:2022-08-18 23:34:45
【问题描述】:

我已通过 Javascript keyup 在标准表单中的输入字段中添加了一千个分隔符:

形式

<input id=\"cal2_txtLoan\" class=\"investment-class-form\"  type=\"text\" placeholder=\"placeholder\">

Javascript 事件按键

 <script>
    var cal2_txtLoan = document.getElementById(\'cal2_txtLoan\');
    
    cal2_txtLoan.addEventListener(\'keyup\', function() {
      var val = this.value;
      val = val.replace(/[^0-9\\.]/g,\'\');
      
      if(val != \"\") {
        valArr = val.split(\'.\');
        valArr[0] = (parseInt(valArr[0],10)).toLocaleString();
        val = valArr.join(\'.\');
      }
      
      this.value = val;
    });
    
    </script>

它工作正常,但现在我的表单无法提交,因为值中的逗号 \",\"

如何在输入字段中显示我的小数分隔符,但只提交值。

我的其余计算供参考:

    <script>
function CalculatePMT(pv, rate, years) {
                return Math.round(pv * (rate / 100 / 12) / (1 - 1 / Math.pow ((1 + rate / 100 / 12) , ( years * 12))));
    
            }
           
            /************** CALCULATE LOAN *************/
            $(\"#cal2_btnCalculate\").click(Calculate2);
    
            function Calculate2(event) {
                var years = $(\"#cal2_txtTenor\").val();
                var rate = $(\"#cal2_txtInterestRate\").val();
                var pv = $(\"#cal2_txtLoan\").val();
                if (CheckForDigit(years) && CheckForDigit(rate) && CheckForDigit(pv)) {
                    var ir = (rate / 100) * 100; // For LH, add 1 more
                    var installment = CalculatePMT(pv, ir, years);
                    $(\"#cal2_txtInstallment\").val(FormatNumberToString(installment));
                    $(\"#cal2_txtMinimumIncome\").val(FormatNumberToString(installment ));
                } else
                    alert(\"ไม่สามารถคำนวนวงเงินสินเชื่อเพื่อการซื้อบ้านได้\");
            }
            /*****************************************/
          
        });
       
        </script
    
  • 也许 parseInt developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 即: ParseInt(15.23) = 15 但如果您允许用户提交小数,您可能不应该忽略十进制值。
  • 题外话:this.value = val 会将光标/用户输入重新定位到输入框的末尾。如果用户做的不仅仅是输入数字,这会很快惹恼他们——这是一个糟糕的用户体验。
  • 问题的标题不正确 - 它不是“小数分隔符”而是“千位分隔符”——即 1,000 中的 ,

标签: javascript jquery regex keyup


【解决方案1】:
<form onsubmit="return deleteThousandSeparator(event)">
  ...
</form>


function deleteThousandSeparator(){
  const cal2_txtLoan = document.getElementById('cal2_txtLoan');
  cal2_txtLoan.value = cal2_txtLoan.value.replace('.','')
}

【讨论】:

  • 问题的标题不正确——不是“小数分隔符”而是“千位分隔符”——即1,000 中的,
  • 编辑-谢谢。
  • @freedomn-m 这取决于国家,在西班牙,千位分隔符是一个点,小数点分隔符是一个逗号。
  • @ManuelMB 正确,但同样盲目地将 1.23 更改为 123 将是大量的如果您不先检查语言环境,则会出现问题!我的评论基于 OP 声明:由于值中的逗号“,”,我的表单无法提交.所以你提出了一个有效的、更大的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多