Reputation: 1430
I have the following code inside a form tag, I would like to have some error text appear underneath the checkboxes however at the moment I am unable to get it to work with the current setup I have below. What am I doing wrong here?
ticketing/competition_checkboxes.html
<div ng-repeat="compCbx in competitionCheckboxes track by $index">
<input ng-attr-id="cc_comp_{{ $index }}" ng-model="compCbx.isChecked" name="cc_comp" ng-attr-label="cc_comp_label_{{ $index }}"
type="checkbox" ng-required="compCbx.checkRequired" ng-checked="compCbx.isChecked" form-blur />
<label ng-attr-id="cc_comp_label_{{ $index }}" ng-attr-for="cc_comp_{{ $index }}" class="fake-label">
<i ng-attr-id="cc_comp_cbx_{{ $index }}"></i> <p ng-bind-html="compCbx.text | to_trusted"></p>
<span class="error-msg error-tnc" ng-show="{{formName}}.cc_comp.$touched && {{formName}}.cc_comp.$error.required">
You must agree to enter the competition
</span>
</label>
</div>
The current output on the page is
As you can see the Terms and Conditions checkbox validates correctly, however that is because it is not in an ng-repeat
The Terms and conditions has this code
<input id="cc_tnc" ng-model="cc_tnc" label="cc_tnc_label" name="cc_tnc" type="checkbox" ng-required="cc_tnc != true" form-blur>
<label id="cc_tnc_label" for="cc_tnc" class="fake-label">
<i id="cc_tnc_cbx"></i> <p>I have read and agree to <a href="@Model.TermsUrl" target="_blank">terms and conditions</a></p>
<span class="error-msg error-tnc" ng-show="{{ formName }}.cc_tnc.$touched && {{ formName }}.cc_tnc.$error.required">
You must agree to the Terms and Conditions to make a purchase
</span>
</label>
<ng-include src="'ticketing/competition_checkboxes.html'"></ng-include>
Form Blur directive
directive('formBlur', function(setErrorState) {
//set element on dirty
return {
restrict: 'A,E',
require: ['^form'],
link: function(scope, element, attrs, ctrl) {
var form = scope[ctrl[0].$name];
element.bind('blur', function() {
scope.$apply(function() {
console.log("Error in blur");
form[attrs.name].$touched = true;
setErrorState(element, form[attrs.name].$valid);
});
});
scope.$watch(form.$name + '.' + attrs.name + '.$valid', function(validity) {
console.log("In watch");
console.dir(form[attrs.name]);
if (form[attrs.name].$touched)
setErrorState(element, validity);
});
}
};
})
Upvotes: 2
Views: 369
Reputation: 1468
Change ng-required="compCbx.checkRequired"
to required="compCbx.checkRequired"
I don't know why it is working ;)
Upvotes: 1