【问题标题】:Angularjs form validation works only if changes made in the form fieldsAngularjs 表单验证仅在表单字段中进行更改时才有效
【发布时间】:2014-11-10 16:05:06
【问题描述】:

我正在尝试使用 angularjs 实现表单验证。当用户开始在表单字段中进行更改时,验证可以正常工作。但是如果单击提交而不输入任何内容,它不会显示任何错误消息。这里是代码

<form name="myform" ng-submit="register(user)" >
        <div class="list ">
            <label class="item item-input item-stacked-label">
                <span class="input-label">Name</span>
                <input type="text" placeholder="John Watson" ng-model="user.name" name="user_name" required>
                <span style="color:red;" ng-show="myform.user_name.$dirty&&myform.user_name.$error.required">Name required</span>
            </label>
            <label class="item item-input item-stacked-label">
                <span class="input-label">Mobile Number</span>
                <input type="tel" ng-minlength="10"  maxlength="10" ng-model="user.mobileno"  placeholder="77777777" name="user_mobileno"  required>
                <span style="color:red;" ng-show="myform.user_mobileno.$dirty&&myform.user_mobileno.$error.minlength">Please provide a valid mobileNo</span>
            </label>
            <label class="item item-input item-stacked-label">
                <span class="input-label">Service Provider</span><br><br>
                <select class="clearfix" style="width:100%; height:30px;" ng-model="user.svp_name" name="user_svp_name" required>
                    <option value="">Select one </option>
                    <option value="xxxx">xxxx</option>
                    <option value="xxxx">xxx</option>

                </select><br><br>
                <span style="color:red;" ng-show="myform.user_svp_name.$dirty&&myform.user_svp_name.$error.required">Select your service provider</span>
            </label>
            <label class="item item-input item-stacked-label">
                <span class="input-label">Email Id</span>
                <input type="email" ng-model="user.email" placeholder="john@example.com" name="user_email" required>
                <span style="color:red;" ng-show="myform.user_email.$dirty&&myform.user_email.$error.email">Please Provide a valid emailId</span>
            </label>

        </div>
        <div style="padding:0 10px;">
            <input type="submit"   class="button button-balanced button-block buttonradius" value="Register" />
        </div><br /><br />
        </form>

我已经提到了这些问题 (AngularJS validation on submit only), (Form validation popup window message works only if change is made in Angularjs) ,但没有帮助我

更新 最后我找到了一个解决方案,但它没有像我预期的那样工作。这些是变化

<span style="color:red;" ng-show="submitted&&myform.user_name.$error.required">Name required</span>
<input type="submit" ng-click="submitted=true" class="button button-balanced button-block buttonradius" value="Register" />

但仅适用于nameserviceprovider 字段(如果单击提交而不输入任何内容,则会显示错误消息),而不适用于其他两个字段(手机号、电子邮件)。

【问题讨论】:

  • 你能在 Chrome 或其他浏览器中重现相同的内容吗?
  • 我在手机上测试过

标签: javascript android angularjs validation ionic-framework


【解决方案1】:
<span style="color:red;" ng-show="myform.user_name.$dirty&&myform.user_name.$error.required">Name required</span>

myform.user_name.$dirty 是为什么它只显示在提交表单之前是否已编辑该字段的原因。 $dirty 在表单字段更改之前不会设置。

我通常做的是在我的范围内放置一个failed 布尔值,如果表单无效,则在提交后我设置$scope.failed = true;。所以如果你走那条路,你会把你的 ng-shows 改成:

<span style="color:red;" ng-show="failed && myform.user_name.$error.required">Name required</span>

控制器:

$scope.register = function(user) {
  if ($scope.myForm.$invalid) {
    // Form is invalid
    $scope.failed = true;
    return;
  }
  delete $scope.failed;


  // Other submission logic
};

【讨论】:

  • 如何检查表单是否无效
  • @Root 哎呀!我更新了我的答案。您也可以将 myForm.$invalid 放在 ng-show 中,但这样只会在有人尝试提交您的表单后才显示错误消息,而不是在表单加载时立即显示。
  • 这是我试过的failed&amp;&amp;myform.user_name.$error.required&amp;&amp;myform.user_name.$invalid 但没用
  • @Root 保持简单。你真的需要所有这些 AND (&&)。按照它的编写方式,所有三个条件必须为真才能显示错误消息。你确定这是对的吗?
猜你喜欢
  • 2014-11-03
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多