Keyup предотвратить по умолчанию не работает angular6 - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу прекратить ввод любого числа после проверки пользовательского регулярного выражения, проблема в том, что условие выполнено, но event.preventDefault не препятствует вводу. Reg ex - ввод значения в процентах от 1 до 100 с десятичными знаками

/^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?)$/

это мой ввод

<input  type='text' (keyup)="preventPercentage($event)"  [(ngModel)]="value">

ts

preventPercentage(event){
  var p = event.target.value
  var s= p.match(/^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?)$/)  != null
  if(!s && p){
    event.preventDefault();
  }
}

пользователь все еще может ввести любое значение, даже если условие истинно, введите что-нибудь между100 выше, он все еще работает, и событие не мешает значениям

  <input  type='text' (keydown)="preventPercentage($event)"  [(ngModel)]="value">

Я использовал клавишу вниз, но она позволяет ввести 123, то есть трехзначные числа, и я не могу затем удалить это число, используя клавишу Backspace, что именно я делаю неправильнокто-нибудь подскажет соль, любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018
preventPercentage(event: any) {
      function stopProgram() {
        event.stopPropagation();
        return false;
      }
      if (event.keyCode === 8) {
        return true;
      }
      var p = event.target.value;
      if ((event.keyCode === 190 && p.indexOf('.') > -1) || p === '100') {
        return stopProgram();
      }
      p = p + event.key;
      var s = p.match(/^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?)$/) != null;
      if (!s && event.keyCode !== 190) {
        return stopProgram();
      }
    }
0 голосов
/ 20 ноября 2018

Попробуй это.Я думаю, что в регулярном выражении требуется изменение согласно вашему требованию.

preventPercentage(event){
  var p = event.target.value + event.key;
  var s = p.match(/^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?)$/) != null;
  if (!s && event.keyCode !== 8) {
    event.stopPropagation();
    return false;
  }
}

Используйте это с keydown:

<input  type='text' (keydown)="preventPercentage($event)" [(ngModel)]="value">
...