Ember введите номер, чтобы разрешить только 2 цифры после десятичной дроби

#javascript #ember.js

#javascript #ember.js

Вопрос:

Я работаю над приложением 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, написанный для ограничения ввода цифр после десятичной дроби, эта функция вызывается в событии нажатия клавиши.

     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 в текстовом поле.

Любая помощь, пожалуйста, заранее спасибо.

Ответ №1:

Чтобы ответить на ваш первый вопрос, причина, по которой он допускает 3 значения, заключается в том, что вы используете keydown событие. keydown Событие запускается до обновления ввода, поэтому вы всегда на 1 символ отстаете от фактического значения. Я бы рекомендовал вместо использования keydown использовать событие change. Если вам действительно нужно искажать вводимые пользователем данные при вводе, вместо этого используйте событие keyup .

Чтобы ответить на ваш второй вопрос, вы можете получить доступ к вводу через event.target , т.е. $(event.target).val(e1);

Наконец, ваш код делает некоторые предположения о вводе пользователем, что произойдет, если они вставят значение, которое длиннее 2 символов после десятичной дроби?