#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 символов после десятичной дроби?