2012-11-04 145 views
13

我有这个AngularJS代码试图在textarea中没有文本时在标签旁边显示两颗星。相同的代码适用于输入标签,但不适用于textarea。Angular JS textarea验证

<div class="input-left"> 
    <label for="email"> 
     <span ng-show="contactform.email.$error.required" class="required">*</span>Email: 
    </label> 
    <input ng-model="email" type="text" name="email" id="email" required></br></br> 
    <label for="budget">Budzet:</label> 
    <input ng-model="budget" type="text" name="budget" id="budget"> 
</div> 
<div class="clearboth"> 
    <label for="msg" class="left" > 
     <span ng-show="contactform.msg.$error.required" class="required">**</span>Pitanja ili Komentari? 
    </label> 
    <textarea ng-model="msg" rows="8" cols="50" class="input-no-width rounded shaded left clearboth" id="msg" required></textarea> 
</div> 

根据AngularJS documentation - textarea的行为应与输入行为相同。

回答

24

<textarea>标记的问题是它没有定义name属性。

AngularJS使用name属性来暴露验证错误。

你应该定义你的textarea像这样:

<textarea ng-model="msg" name="msg" rows="8" cols="50" 
      class="input-no-width rounded shaded left clearboth" id="msg" required> 
</textarea> 

请注意,有idng-model不足以妥善处理验证消息。在AngularJS应用程序中,id属性通常没有多大用处,可以省略。

+0

谢谢。我以为它使用ID。 – Zec

+0

这对我有很大的帮助。但我认为同时有一些奇怪的事情发生。我可以在文本输入字段中省略name属性,验证将正常工作,但textarea需要我在那里。 –

0

对于表单验证名称非常重要。给它一个它应该工作的名字。

<textarea ng-model="msg" 
      rows="8" 
      cols="50" 
      class="input-no-width rounded shaded left clearboth" 
      id="msg" 
      name="msg" 
      required> 
</textarea>