textarea点击角度的输入验证

Posted

技术标签:

【中文标题】textarea点击角度的输入验证【英文标题】:Input validation on textarea click angular 【发布时间】:2021-05-20 17:49:11 【问题描述】:

我有一个输入文本框和一个表单中的文本区域。如果我点击 textarea 我需要验证输入文本框是否为空,如果为空,则应该禁用文本区域,并且我应该在输入文本字段下方显示一条验证消息。

onClickvalidate(name: string) 

    this.noContentError = "";

    this.noName = name;
    if (this.noName == '') 
        this.noContent = true;

        //this.noContentError = "Please provide a name."
        this.name.setErrors(
            noContent: `Please provide a name `
        );


     else 
        this.noContent = false;

        this.name.setErrors(null);
    

<div class="row">
<div class="col-md-3">
   <label for="name"> Name</label>
   <input pInputText class="input" id="name" formControlName="name" placeholder="Name" type="text" />
   <div *ngIf="name.invalid && name.touched" class="">
      <div *ngIf="this.noContent" class="alert alert-danger alert-duplicate">
         this.noContentError
      </div>
   </div>
   <div class="col-md-6 ">
      <label for="content">Input Text</label>
      <div class="textarea-content">
         <textarea pInputTextarea class="text-area" rows="1" id="content" formControlName="content" [readonly]="!name.value" placeholder="content is required"  (click)="onClickvalidate(name.value)" (change)="textFormatting()"></textarea>
         <div *ngIf="content.invalid && name.value">
            <span *ngIf="!content.value" class="">Content Required</span>
         </div>
      </div>
   </div>
</div>
我尝试使用 setErrors 添加验证,但不工作。请建议我怎样才能做到这一点。

【问题讨论】:

[disabled]="name.invalid &amp;&amp; name.touched" 在文本区域中是否无法正常工作? Textarea 将被禁用,但我必须在文本框下方显示验证消息。那部分不工作。 @sarasm 请检查我的答案并告诉我。注意:我使用了readonly 而不是disabled 【参考方案1】:

我想我有一个适合你的解决方案。虽然代码效率不高,但它可以按照您的要求工作。请检查下面给出的stackblitz的代码和演示链接=> Stackblitz Demo Code link TS:

onClickInput()
      this.showerror=false;
    
    isTextAreaReadonly()
      let temp=this.registerForm.get('firstName').value;
      
      if(temp.length>=1)
        return false;
      
      else
        return true;
      
    
    onClickvalidate()
        let temp=this.registerForm.get('firstName').value;
      
         if(temp.length>=1)
        this.showerror=false;
      
      else
        this.showerror=true;
      
    

HTML:

<form [formGroup]="registerForm" (ngSubmit)="onSubmit()">
<div class="form-row">
   <div class="form-group col-5">
      <label>First Name</label>
      <input type="text" formControlName="firstName" class="form-control" [ngClass]=" 'is-invalid': submitted && f.firstName.errors " (click)="onClickInput()" />
      <div *ngIf="showerror" >
         <div *ngIf="showerror" style="font-size:10px;color:red">First Name is required*</div>
      </div>
   </div>
   <div class="col-md-6 ">
      <label for="content">Input Text</label>
      <div class="textarea-content">
         <textarea  class="text-area" rows="1" id="content" formControlName="content" placeholder="content is required"  (click)="onClickvalidate()" [readonly]="isTextAreaReadonly()"></textarea>
         <div *ngIf="submitted && f.content.errors" class="invalid-feedback">
            <div *ngIf="f.content.errors.required">Content Required</div>
         </div>
      </div>
   </div>
</div>
<div class="text-center">
   <button class="btn btn-primary mr-1">Register</button>
   <button class="btn btn-secondary" type="reset" (click)="onReset()">Cancel</button>
</div>
</form>

【讨论】:

嗨 Linker,我现在在代码中遇到了问题。在我的情况下,名字和内容都是必需的。因此,如果我单击 firstName 并且未输入任何数据,则会显示所需的验证错误“First Name is required*”。如果我单击内容并再次在名字下方出现相同的错误“需要名字*”。无论如何我可以避免这种情况吗?

以上是关于textarea点击角度的输入验证的主要内容,如果未能解决你的问题,请参考以下文章

当其他输入验证验证失败时,Razor Pages textarea 输入只会增长和增长

多行文本文本输入框 textarea 可点击任意地方编辑

JS更改值后验证textarea

javascript 操作 textarea

用于 textarea 的 ngModel 不能在角度 2 中工作

Textarea失去鼠标点击的焦点?