I was googled on this issue but still can't find the right discussion about it. We are using valdr and ui select in a form ( angularJS app ) and we've faced the problem that the input that the ui-select renders won't get a name attribute, and since this, angular throws an error:
Error: Form element with ID "undefined" is not bound to a field name.
at d.link (http://localhost:8080/bower_components/valdr/valdr.min.js:1:8414)
at invokeLinkFn (http://localhost:8080/bower_components/angular/angular.js:8141:9)
at nodeLinkFn (http://localhost:8080/bower_components/angular/angular.js:7653:11)
at compositeLinkFn (http://localhost:8080/bower_components/angular/angular.js:7009:13)
at nodeLinkFn (http://localhost:8080/bower_components/angular/angular.js:7648:24)
at http://localhost:8080/bower_components/angular/angular.js:7884:13
at processQueue (http://localhost:8080/bower_components/angular/angular.js:13071:27)
at http://localhost:8080/bower_components/angular/angular.js:13087:27
at Scope.$get.Scope.$eval (http://localhost:8080/bower_components/angular/angular.js:14287:28)
at Scope.$get.Scope.$digest (http://localhost:8080/bower_components/angular/angular.js:14103:31) <input type="text" autocomplete="off" tabindex="-1" aria-expanded="true" aria-label="{{ $select.baseTitle }}" aria-owns="ui-select-choices-{{ $select.generatedId }}" aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}" class="form-control ui-select-search ng-pristine ng-untouched ng-valid" placeholder="{{$select.placeholder}}" ng-model="$select.search" ng-show="$select.searchEnabled && $select.open">
So we were tried some hacks on the ui-select directive like templateCache rewrite / modify, hidden inputs with the same model but the result is the same.
Btw templateCache rewriting is the worst approach because of this directive used in appwide by other directives and we cannot hack on the whole app.
Did anyone faced with this problem?
Code snippet: http://plnkr.co/edit/sDNDDtnhi7Jxi9mtjDTl?p=preview
If the name
attribute is not present on input element valdr
throws exception.
ui-select
internally creates a input field without name
attribute. Hence the error.
You can try this to get rid of the error.
directive('input', function () {
var count = 0;
return {
restrict: 'E',
compile: function () {
return {
pre: function (scope, element, attrs) {
// if the input is created by ui-select and has ng-model
if (element.hasClass('ui-select-search') && attrs.ngModel) {
if (!attrs.name) { // if the input is not having any name
attrs.name = 'ui-select' + (++count); // assign name
}
}
}
}
}
}
})
Working Plnkr
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With