Ember 输入类型数字只允许小数点后 2 位数字

Ember input type number to allow only 2 digits after Decimal

我正在开发一个Ember应用程序,输入类型编号如下

 ${{input type="number" id=p.ViolationTypeId 
          value=p.PenaltyAssessed maxlength="5" 
          scale="0.01" pattern="^\d+(\.\d{0,2})?$" 
          key-down=(action 'allowOnly2Decimals') 
          focusOut=(action 'saveTotalPenalty' p model.id p.PenaltyAssessed)}}

然后我有下面的JavaScript代码写了限制输入小数点后的数字,这个函数在Key-Down事件中调用。

    allowOnly2Decimals: function (e1, event) {
            var boxId = '#' + event.path[0].id;

            //if ((event.keyCode == 190) || (event.keyCode == 110)) {
            //    this.decimalPressed = true;
            //}

            var t = e1.toString().split('.');

            if (t[1] != null) {
                if (t[1].length == 2) {
                    this.limitDecimal = e1;
                    $(boxId).val(e1);
                }

                if (t[1].length >= 2) {
                    e1 = this.limitDecimal;
                    $(boxId).val(e1);

                    return false;
                }
            }
        }
    }

它在工作,但它在做什么,它允许小数点后 3 位数字,但是当我在服务上发布它的值时,它正确地采用小数点后 2 位数字,但它在文本框中显示的是 3 位数字小数点后。 如果可能的话,另一个请求是,我可以在不使用文本框上的 id 属性的情况下做同样的事情吗?

任何帮助,在此先感谢。

要回答您的第一个问题,它允许 3 个值的原因是因为您正在使用 keydown 事件。 keydown 事件在输入更新之前触发,因此您始终比实际值晚 1 个字符。我建议不要使用 keydown,而是使用 change event。如果您真的必须在用户键入时打乱用户的输入,请改用 keyup 事件。

要回答您的第二个问题,您可以通过 event.target 访问输入,即 $(event.target).val(e1);

最后,您的代码对用户的输入做了一些假设,如果他们粘贴的值超过小数点后 2 个字符,会发生什么情况?