键入防止默认不起作用angular6

键入防止默认不起作用angular6

我想在验证自定义正则表达式后停止输入任何数字,问题是条件变为真,但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,即三位数
然后我无法使用退格键删除该数字,正是我做错了什么,任何人都可以提出解决方案,我们将不胜感激

最佳答案

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

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">

关于javascript - 键入防止默认不起作用angular6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53387359/

10-11 05:09