验证单选按钮AngularJS

Posted

技术标签:

【中文标题】验证单选按钮AngularJS【英文标题】:Validate Radio Button AngularJS 【发布时间】:2014-09-01 08:48:14 【问题描述】:

这似乎应该很容易,但我没有找到答案。我有一个表格,我需要在其中验证是否已从广播组中进行了选择。我尝试在单选按钮上使用“必需”属性,但是当表单被验证时它会抱怨,除非所有单选按钮都被选中(这在设计上是不可能的)。

在 AngularJS 中验证单选组选择的正确方法是什么?

<form name="myForm" ng-submit="submitForm()" ng-controller="ExampleController">
  <input type="radio" ng-model="color" value="red" required>  Red <br/>
  <input type="radio" ng-model="color" value="green" required> Green <br/>
  <input type="radio" ng-model="color" value="blue" required> Blue <br/>
  <tt>color = color | json</tt><br/>
  <button type="submit">Submit</button>
</form>

单击 Plnkr 中的提交按钮会显示该行为。

http://plnkr.co/edit/3qcIbMvJk19OvokcHe2N?p=preview

【问题讨论】:

【参考方案1】:

尝试使用ng-required="!color"。这使得该字段仅在未设置值时才需要。如果设置了值,则移除 required 并通过验证。

<input type="radio" ng-model="color" value="red" ng-required="!color">  Red <br/>
<input type="radio" ng-model="color" value="green" ng-required="!color"> Green <br/>
<input type="radio" ng-model="color" value="blue" ng-required="!color"> Blue <br/>

这是一个更新的 plunker,它表明表单现在可以正确验证: http://plnkr.co/edit/EdItU2IIkO1KIsC052Xx?p=preview

更新

e-cloud 的answer 很简单,不需要额外的指令。如果可能的话,我建议每个人都使用这种方法。在这里留下这个答案,因为它确实提供了一个可行的解决方案并演示了 ng-required 指令的使用。

【讨论】:

ng-required 而不是 required 这样做。谢谢。 太棒了!谢谢。 这个解决方案不起作用,即使在提供的 plnkr 演示中也不行。 @ConquerorsHaki 它似乎仍在为我工作。选择值后,您可以提交表单。你在看什么? 对不起@dmullings 我一定把plnkrs弄糊涂了。它确实像一个魅力!【参考方案2】:

我认为您需要为无线电组添加一个名称,对于无线电输入需要一个名称来确定它属于哪个,下面的链接可以在没有 ng-required 的情况下进行验证(接受的答案)

<input type="radio" name='group' ng-model="color" value="red" required>  Red <br/>
<input type="radio" name='group' ng-model="color" value="green" required> Green <br/>
<input type="radio" name='group' ng-model="color" value="blue" required> Blue <br/>

http://plnkr.co/edit/LdgAywfC6mu7gL9SxPpC?p=preview

【讨论】:

工作正常,组的名称对于正确的单选按钮工作是必要的,特别是如果您在一个表单中有多个组... @CilliéMalan,我想它总是这样工作。至少从 1.2 开始。 需要注意的重要一点是,无论选择哪个选项,单选按钮组都被认为是有效的,除非组中至少有一个单选按钮具有ng-model 属性。 要注意的另一件事是,这并不能解决想要绑定ng-model$touched$dirty 属性的问题,但有一种解决方法(至少对于$dirty) 其中ng-form 可以嵌套和引用。在此处查看类似问题 - ***.com/questions/22181462/…【参考方案3】:

使用指令的替代解决方案。接受的答案在 Firefox (v 33.0) 中对我不起作用。

这个想法是在更改时将所有具有特定类名的无线电上的 required 属性设置为 false。

添加 jQuery 是因为我在使用 jqlite 删除属性功能时遇到问题。 我尽可能多地从原始 plunker 中复制。

http://plnkr.co/edit/nbzjQqCAvwNmkbLW5bxN?p=preview

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example - example-radio-input-directive-production</title>
  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js"></script>
</head>
<body ng-app="radioExample">
  <script>
    angular.module('radioExample', [])
    .controller('ExampleController', ['$scope', function($scope) 
      $scope.myObject= ;

      $scope.specialValue = 
        "id": "12345",
        "value": "green"
      ;

      $scope.submitForm = function() 
        alert('valid');
      

    ])
    .directive('colorChoice', function() 
      return 
        restrict: 'E',
        template: '<div ng-repeat="c in colors"><input class="colorClass" type="radio" value=c ng-model="myObject.color" required />c</div>',
        link: function(scope, element, attrs) 
          scope.colors = ['Red', 'Green', 'Blue'];

          element.on('change', function()
            $(".colorClass").attr("required", false);
          );
        
      
    );
  </script>
  <form name="myForm" ng-submit="submitForm()" ng-controller="ExampleController">
    <color-choice></color-choice>
    <tt>color = myObject.color | json</tt><br/>
    <button type="submit">Submit</button>
  </form>

</body>
</html>

【讨论】:

如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 对不起,这应该是在 Firefox (v 33.0) 中工作的替代解决方案。当前接受的答案对我不起作用。 酷,所以这是一个可行的解决方案?如果是这样,太棒了。可能只是您的答案中的语言并没有使这一点变得非常明显:)【参考方案4】:

在我的例子中,我使用了 angularJS 材质库并将required 属性添加到&lt;md-radio=group&gt; 标签就可以了。

【讨论】:

以上是关于验证单选按钮AngularJS的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 用作单选按钮的 3 按钮组

在选择最后一个按钮之前,AngularJS 单选按钮未标记为 $dirty

AngularJS - 未选中单选按钮

AngularJS、ngRepeat 和默认选中单选按钮

AngularJs - 在表格中设置单选按钮值

AngularJs:如何设置基于模型检查的单选按钮