如果数字类型的输入不是数字

时间:2017-08-03 07:25:57

标签: javascript angular html5-input-number

我正在为这个问题奋斗第3天。我正在使用带有formControl的角度动态表单来绑定值并将创建的控件验证到表单。还包括:材料角度。

我有这个问题: 当我输入输入类型=数字时,即' 123。'它将值重置为空字符串。添加另一个数字" 123.3,值设置为123.30 - 这是正确的。

问题是用户设置值结束句点或逗号结尾,或者有多于1个逗号/句点,或者基本上是错误的。 Angular的验证不会运行 - 字段变空,值为'''因此,即使用户输入了一些输入,也没有任何消息,控件为空并且表单有效。 我发现我会阻止用户输入第二个句号/逗号,但是我无法阻止它,因为无法检查他是否已经使用逗号来表示' 123。'因为价值得到了''这太令人困惑了。

如果我改为type = text,一切正常。

根据我所研究的内容 - 这与Number Value Accessor有关。

writeValue(value: number): void {
    // The value needs to be normalized for IE9, otherwise it is set to 'null' when null
    const normalizedValue = value == null ? '' : value;
    this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
}

registerOnChange(fn: (_: number|null) => void): void {
    this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };
}

我试图用customValueAccessor覆盖它,但没有运气。 我也尝试使用inpt类型的文本,但我需要在手机上弹出一个数字键盘,即使使用pattern = \ d *也不能强制它,因为复杂的角度验证会让人发疯。

这是我的一些代码:

import { FieldConfig } from '../../interfaces/field-config.interface';
import { Field } from '../../interfaces/field.interface';
import { LabelFieldConfig } from '../../interfaces/label-field-config.interface';
import { TextFieldConfig } from '../../interfaces/text-field-config.interface';

@Component({
  selector: 'form-input',
  templateUrl: './form-input.component.html',
  styleUrls: ['form-input.component.scss']
})
export class FormInputComponent implements Field, OnInit {
  config: FieldConfig & LabelFieldConfig & TextFieldConfig;
  group: FormGroup;
  formControl: AbstractControl;

  onBlur(): void {
    let value = this.formControl.value;
    value = this.config.format(value);
    if (this.formControl.valid) {
      this.formControl.setValue(value);
    }
  }

  keyDown(event: any): void {
    const { keyCode } = event;

    if (!this.config.isValidKeyCode(keyCode)) {
      event.preventDefault();
    }
  }

  ngOnInit() {
    this.formControl = this.group.controls[this.config.name];
  }
}

有什么想法吗?非常感谢您的帮助。 或许你知道在文本输入上强制使用数字键盘的方法吗?这也会有所帮助。

如果您需要更多信息,我很乐意提供。 感谢

0 个答案:

没有答案