键入防止默认不起作用angular6

时间:2018-11-20 06:24:06

标签: javascript angular6 keydown keyup

我想在验证自定义正则表达式后停止输入任何数字,问题是条件为真,但event.preventDefault不会阻止输入,正则表达式是以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,即三位数 然后我就不能使用退格键删除该号码了,我到底在做什么错,有人可以建议任何帮助将得到帮助

2 个答案:

答案 0 :(得分:0)

尝试一下。我认为您需要根据正则表达式进行更改。

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;
  }
}

将此功能与按键一起使用:

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

答案 1 :(得分:0)

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();
      }
    }