gpt4 book ai didi

javascript - 提交时的表单验证 - angularjs 1.5 - $invalid when field $pristine

转载 作者:行者123 更新时间:2023-11-29 21:31:20 26 4
gpt4 key购买 nike

我正在加载表单中的数据。我想让用户仅在表单有效时才提交数据。最初表格是原始的但无效。在用户可以编辑的三个字段中,如果他更改了任何一个,表单将不再是原始的,这没关系,但表单仍然无效..尽管其他字段中的值是有效的。我怎样才能绕过在每个字段周围放置 isPristine 和 IsValid 条件?代码如下。我把它放在中继器内进行编辑/查看。删除了代码的 View 部分,因为我认为它不适用于这种情况。

<table class="table">
<tbody>
<tr ng-repeat="comment in comments | orderBy: 'CreatedDate':true" ng-class-odd="'odd'" ng-class-even="'even'">
<td style="padding-left:1em;">

<ng-form name="editCommentForm">
<table border="0" class="form-group" ng-show="editComment.CommentID == comment.CommentID">
<tr>
<td width="25%">Comment Type:</td>
<td width="50%">
<select name="cbCommentType" ng-model="comment.CommentTypeID" required>
<option ng-selected="{{comment.CommentTypeID == option.CommentTypeID}}" ng-repeat="option in CommentTypes" value="{{option.CommentTypeID}}">{{option.Name}}</option>
</select>
</td>
<td width="25%" class="errorMessage">
<span ng-show="editCommentForm.cbCommentType.$error.required">Type is required.</span>
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td width="25%">Effective Date:</td>
<td width="50%">
<span class="input-group">
<input type="text" name="txtEffectiveDate" class="form-control" uib-datepicker-popup ng-model="comment.EffectiveDate" is-open="editComment.popupOpened" ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="openDatePicker(comment)"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</span>
</td>
<td width="25%" class="errorMessage">
<p ng-show="editCommentForm.txtEffectiveDate.$error.required">Effective date is required.</p>
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td width="25%">Comment:</td>
<td width="50%">
<textarea name="txtComment" style="width:80%;resize:none;" name="txtComment" ng-model="comment.CommentText" placeholder="add comment here" ng-minlength="4" required> </textarea>
</td>
<td width="25%" class="errorMessage">
<p ng-show="editCommentForm.txtComment.$error.required">Comment is required.</p>
<p ng-show="editCommentForm.txtComment.$error.minlength">Comment is too short.</p>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="button" value="Cancel" ng-click="cancelObj(comment)" class="btn btn-default active btn-xs" />
<input type="button" ng-disabled="editCommentForm.$pristine ? false : editCommentForm.$invalid" value="Save comment" ng-click="updateObj(comment)" class="btn btn-default active btn-xs" />
</td>
</tr>
</table>
</ng-form>
</td>
</tr>
</tbody>
</table>

最佳答案

您有 1 个表单和 3 个字段。

您可以让您的 Controller 可以访问该表单。

通常,为此我使用 CONTROLLER AS 语法如下:

<ng-form name="vm.editCommentForm">

其中 vm 是 Controller 别名。

(我确信它也可以在没有 CONTROLLER AS 语法的情况下将表单公开给 Controller ,但如果您对这种方法感兴趣,这是为了让您了解)。

然后在你的 Controller 中你会做一些像...

vm.showFieldError = function(fieldName) {
var formField = vm.editCommentForm[fieldName];
return (formField.$invalid && formField.$dirty);
}

然后您将在您的 View 中引用此函数来确定是否显示错误消息。

关于javascript - 提交时的表单验证 - angularjs 1.5 - $invalid when field $pristine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com