Search code examples
angularjsangular-ngmodel

Disable button when nothing checked AngularJS


I want to show button post only when modelCheck is checked, and disable when nothing is checked My code : HTML : HTML:

  <table>
  <tr>
    <th>name</th>
     <th><button class="btn" ng-if="(modelCheck | json) != ({} | json)" ng-click="post()">post</button></th>
      <th><button class="btn disabled" ng-if="(modelCheck | json) == ({} | json)" ng-click="post()">post</button></th>
  </tr>
  <tr ng-repeat="x in messages">
    <td>{{x.name}}</td>
    <td><input type="checkbox" ng-model="modelCheck[x.name]"/></td>
  </tr>
</table>

JS:

 $scope.modelCheck = {};

  $scope.messages = 
    [
        {
            "name": "eva",
        },
        {
            "name": "ben",
    },
 ];

$scope.post = function(){
    var data = [];
       for (var k in $scope.modelCheck) {
           if ($scope.modelCheck.hasOwnProperty(k) && $scope.modelCheck[k]) {
            data.push({'name': k});
           }
       }
       console.log(data);
       // do with data as you wish from here
    };

My plunker: http://next.plnkr.co/edit/FudqIFQ1Pe0Vfhvq

Thanks for answers and help in advance!


Solution

  • You can use ng-disabled to do this.

    <button class="btn"  ng-disabled="!isSelected()" ng-click="post()">post</button>
    

    and in JavaScript :

    $scope.isSelected = function() {
        var cnt = 0; 
        Object.keys($scope.modelCheck).forEach(function (e) {
            if ($scope.modelCheck[e]) {
                cnt +  = 1; 
            }
        }); 
        if (cnt > 0) {
            return true; 
        }
        else {
            return false; 
        }
    }
    

    Plunker demo . Hope this helps