3

I have the following controller... I'm trying to get the name and rating attibute from an HTML input, but I get the error TypeError: angular.element(...).getAttribute is not a function

app.controller('courseReview', function ($scope, $http) {

  $scope.rateThis = function rateThis(el){
    var elName = angular.element(el).getAttribute('name');
    var rating = angular.element(el).getAttribute('rating');
    document.getElementById(elName+'Rating').value = rating;
  }
});

HTML

<div ng-controller="courseReview">
  <!-- radio input -->
  <input class="star-5" id="wstar-5" rating="5" type="radio" name="welcome" ng-click="rateThis(this)"/>
</div>

Is there another way to do this?

1 Answer 1

16

As per the documentation "https://docs.angularjs.org/api/ng/function/angular.element", to get attribute of an element you need to use

.attr('name');

in place of

.getAttribute('name');

Important

You are passing this in your html, here this will not pass the DOM element to the function, rather it will refer to the scope. To pass the current element pass $event

HTML Change

ng-click="rateThis(this)" to ng-click="rateThis($event)"

JS Change

$scope.rateThis = function rateThis($event){
    var elName = angular.element($event.target).attr('name');
    var rating = angular.element($event.target).attr('rating');
    document.getElementById(elName+'Rating').value = rating;
}

For reference - http://plnkr.co/edit/ZQlEG33VvE72dOvqwnpy?p=preview

Sign up to request clarification or add additional context in comments.

4 Comments

This gives undefined for me
Shouldn't ng-onclick be ng-click?
You can use $event as well - For reference - plnkr.co/edit/ZQlEG33VvE72dOvqwnpy?p=preview
Excellent, appreciate your help with this - still learning to think the Angular way!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.