라디오 버튼 AngularJS 유효성 검사


78

이것은 꽤 쉬울 것 같지만 답을 찾지 못했습니다. 라디오 그룹에서 선택했는지 확인해야하는 양식이 있습니다. 라디오 버튼에 'required'속성을 사용해 보았지만 양식의 유효성을 검사 할 때 모든 라디오 버튼을 선택하지 않는 한 불만이 제기됩니다 (설계 상 불가능 함).

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

답변:


126

을 사용해보십시오 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/>

다음은 양식이 이제 올바르게 검증되었음을 보여주는 업데이트 된 플 런커입니다. http://plnkr.co/edit/EdItU2IIkO1KIsC052Xx?p=preview

최신 정보

e-cloud의 대답 은 간단하며 추가 지침이 필요하지 않습니다. 가능한 한 모든 사람이 그 방법을 사용하는 것이 좋습니다. 이 답변은 작동 솔루션을 제공하고 ng-required 지시문의 사용을 보여주기 때문에 여기에 남겨 둡니다.


2
ng-required그냥하는 대신 required. 감사.
Spencer

훌륭한! 감사합니다.
Rod Hartzell

이 솔루션은 제공된 plnkr 데모에서도 작동하지 않습니다.
Ahmed Hasn.

@ConquerorsHaki 여전히 나를 위해 일하는 것 같습니다. 값이 선택되면 양식을 제출할 수 있습니다. 당신은 무엇을보고 있습니까?
dmullings

1
실례합니다 @dmullings 내가 plnkrs를 혼동했을 것입니다. 참으로 매력처럼 작동합니다!
Ahmed Hasn.

98

나는 당신이 필요로하는 것은 라디오 그룹의 이름을 추가하는 것이라고 생각합니다.

<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


잘 작동하고, 그룹의 이름은 ... 폼에 여러 그룹이 경우 특히, 올바른 라디오 버튼 작동에 필요한
PhiLho

@ CilliéMalan, 나는 항상 이런 식으로 작동한다고 생각합니다. 1.2 이상.
e-cloud

2
중요한 점은 그룹의 라디오 버튼 중 적어도 하나에 ng-model속성 이 없으면 라디오 버튼 그룹은 선택되는 옵션에 관계없이 유효한 것으로 간주된다는 것입니다 .
Robert Hickman

1
주의해야 할 또 다른 사항은이 방법으로의 $touched또는 $dirty속성에 바인딩하려는 문제를 해결하지 ng-model못하지만 중첩되고 참조 될 수 있는 해결 방법 (적어도 $dirty)이 ng-form있습니다. 여기에 비슷한 질문을 참조하십시오 - stackoverflow.com/questions/22181462/...
jamiebarrow

0

지시문을 사용하는 대체 솔루션. 수락 된 답변이 Firefox (v 33.0)에서 작동하지 않았습니다.

아이디어는 특정 클래스 이름을 가진 모든 라디오에서 필수 속성을 false로 설정하는 것이 었습니다.

  • jqlite 속성 제거 기능에 문제가 있었기 때문에 jQuery가 추가되었습니다.
  • 나는 원래 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>

새로운 질문이 있으면 질문하기 버튼 을 클릭하여 질문하십시오 . 컨텍스트를 제공하는 데 도움이되는 경우이 질문에 대한 링크를 포함하십시오.
Taryn East

2
죄송합니다. 이것은 Firefox (v 33.0)에서 작동하는 대체 솔루션입니다. 현재 받아 들여지는 답변이 저에게 효과적이지 않았습니다.
jroot

멋지다, 그래서 이것이 작동하는 해결책인가? 그렇다면 굉장합니다. 아마도 당신의 대답 언어는 슈퍼 분명 :)하지 않습니다
타린 동

0

제 경우에는 angularJS 재질 라이브러리를 사용 required하고 <md-radio=group>태그에 속성을 추가 하면 트릭이 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.