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 个字符,会发生什么情况?
我正在开发一个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 个字符,会发生什么情况?