Подтвердить что ты не робот

УгловойJS требуется, чтобы переключатели нуждались в двух событиях щелчка, чтобы быть действительными

У меня очень простая форма, в которой требуется выбрать переключатель, чтобы форма была действительной. Радиокнопки создаются с помощью ngRepeat.

Как вы можете видеть из этой скрипты, в то время как желаемое поведение заключается в том, что при первом нажатии переключателя, который должен проверять форму (являющийся единственным элементом), однако обратите внимание, что требуется дополнительный щелчок (на тот же переключатель или любой другой), чтобы подтвердить форму:

http://jsfiddle.net/Xsk5X/3/

Что мне не хватает?

4b9b3361

Ответ 1

Попробуйте добавить атрибут ng-click к вашему входу радиокнопки.

Благодарим Мэнни D за это. Да, это немного хаки, но это работает. Например.

<input type="radio" 
       name="groupName"  
       ng-model="editObject.Property"                             
       ng-value="someValue"
       ng-click />

Ответ 2

Все остальные решения работают вокруг: Все, что вам нужно сделать, это удалить атрибут name, если вы используете атрибут ng-model, который вам не нужен, и они конфликтуют.

Задание name приводит к путанице Angular, поскольку он меняет значение один раз для модели Angular и другое время для имени элемента формы.

Ответ 3

У меня была эта проблема, потому что коллега скопировал радиокнопки на одной странице и скрыл их для временной ссылки, поэтому дублированные радиовходы с таким же именем

Ответ 4

Причина, по которой это ломается, - это то, что вы устанавливаете все радиокабели. В результате, в зависимости от того, как вы его пишете - angularjs говорит, что это недействительно, потому что не все были выбраны в какой-то момент.

Как это сделать, выполните следующие действия:

Использование флажков и необходимых с помощью AngularJS

(проверьте 1-й и 2-й ответы). Это решит вашу проблему.

Ответ 5

Похоже на проблему с AngularJS 1.0.3 $. $apply update. Протестировал ваш точный Fiddle в 1.0.2 (проверьте его самостоятельно), и он работает так, как вы ожидаете этого.

Кажется, что не что-то не так с вашим кодом, только то, что $scope. $apply (или $digest) работает не так, как ожидалось при первом выборе.

Очень простое исправление заключается в том, чтобы заставить область $также обновляться при каждом выборе, попробуйте изменить следующую строку кода в вашей форме:

<p>Favorite Beatle</p>

измените его:

<p>Favorite Beatle: {{name}}</p>

И вы увидите, как myForm. $invalid обновляется даже после первого щелчка.

Я бы попробовал это с последней версией AngularJs и сообщите нам, если это произойдет там. Другое решение, о котором я могу думать, это установка выбранного по умолчанию радио, что приведет к тому, что myForm. $Invalid будет ложным с самого начала. вы можете сделать это, добавив следующую строку в свой код контроллера:

$scope.name = "John";

или любое имя по умолчанию, которое вы хотите.

Ответ 6

Несколько раз цикл $digest dosen't $применяется (fn), потому что у вас есть еще два экземпляра. Для исправления вам понадобится $применить этот трюк вручную, поэтому поместите это в свои директивы:

angular.('myApp',[])
.directive('ngRadioExtend', ['$rootScope', function($rootScope){
        return {
            require: 'ngModel',
            restrict: 'A',
            link: function(scope, iElm, iAttrs, controller) {
                iElm.bind('click', function(){
                    $rootScope.$$phase || $rootScope.$apply()
                });
            }
        };
    }])

и используйте его как:

<input type="radio" name="input_name" ng-model="some" value="F" ng-required="true" ng-radio-extend>

<input type="radio" name="input_name" ng-model="some" value="M" ng-required="true" ng-radio-extend>

СДЕЛАЙТЕ это правильно!

Ответ 7

Проблема области, которая не обновляется, все еще встречается в 1.1.5

Простая работа - просто добавить   <span ng-show="false"> {{name}} </span>

Fiddle: http://jsfiddle.net/jonyschak/xaQJH/