在输入编辑上强制实时验证

时间:2017-05-08 18:14:07

标签: javascript angularjs angularjs-directive

某些背景,我使用指令强制实施货币输入字段的实时验证。我这样做是通过定义正则表达式pattern,在输入字段上侦听keypress事件,并使用pattern.test()将用户输入作为函数的参数。如果我的函数找不到与pattern.test()的匹配项,我会在按键事件上使用preventDefault()来阻止数字进入输入。因此,只允许与我的pattern匹配的数字进入输入。这一切在使用场景中完全正常,用户不想返回并编辑他/她的输入。请参阅下面的代码。

var pattern = new RegExp('^\\-{0,1}[0-9]{0,}\\.{0,1}[0-9]{0,2}$');

element.on('keypress', function(event) {
   var testString = element[0].value + event.key;
   if (!pattern.test(testString)) {
     event.preventDefault();
   }
});

问题我想要在通过验证后编辑用户输入。为了澄清,我编写代码的方式,正则表达式测试var testString = element[0].value + event.key,并且不知道位置变化。

因此,如果123.45当前在输入框中,当我想将其编辑为6123.45时,我的正则表达式实际上是针对123.456进行测试(因为event.key始终附加到当前值的末尾输入框)。因为我的正则表达式只允许2个小数位,所以新键被调用preventDefault() - 使得它看起来像值的编辑无效。

我似乎无法在输入框中可靠地获取LIVE值,同时仍然专注于它(已尝试ctrl.$viewValuectrl.$modelValue,但这总是最终成为值在我刚刚输入的新密钥之前。

有没有人对如何执行此实时验证和支持编辑有任何建议?

0 个答案:

没有答案